찾다

 >  Q&A  >  본문

处理Android中,设置应用的优先级最高,然而短信应用依然最先收到广播导致无法拦截短信的问题

//拦截短信验证码的广播

    IntentFilter intercptFilter = new IntentFilter();
    intercptFilter.addAction(SmsInterceptReceiver.ACTION_SMS_INTERCEPT);
    intercptFilter.setPriority(Integer.MAX_VALUE);
    smsInterceptReceiver = new SmsInterceptReceiver();
    mContext.registerReceiver(smsInterceptReceiver, intercptFilter);

//发送广播
context.sendOrderedBroadcast(intent, null);

@Override

public void onReceive(Context context, Intent intent) {
    // 拦截短信
    String action = intent.getAction();
    Log.d("打印广播类型:"+action);
    Bundle bundle = intent.getExtras();
    if(bundle==null){
        return;
    }

    if(action!=null&&action.equals(ACTION_SMS_INTERCEPT)){
        Object[] pdus = (Object[])bundle.get("pdus");

        if (pdus != null && pdus.length > 0)
        {
            SmsMessage[] messages = new SmsMessage[pdus.length];
            int length = messages.length;
            for (int i = 0; i < length; i++)
            {
                byte[] pdu = (byte[])pdus[i];
                messages[i] = SmsMessage.createFromPdu(pdu);
            }
            for (SmsMessage msg : messages){
                 // 获取短信内容
                String content = msg.getMessageBody();
                String sender = msg.getOriginatingAddress();
                analysisMessage(sender,content);
            }
            Log.d("是否要向用户显示短信,1是:"+isShowSms);
            if(isShowSms==1){
                abortBroadcast();//拦截短信
            }
        }
    }
巴扎黑巴扎黑2772일 전498

모든 응답(2)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 17:36:25

    코드에는 문제가 없지만 구현하려는 기능이 별로 좋지 않습니다. 오늘날 대부분의 휴대전화에서는 전화 문자 메시지를 가로채는 것이 불가능합니다. 결국 전화 문자 메시지는 휴대전화의 가장 기본적인 용도이므로 앱을 설치하는 것은 불가능하며 이 기능에 영향을 미칩니다. 이 코드는 초기 Android 버전에서는 가능했지만 이제 Android에서는 시스템 브로드캐스트를 가로채는 동작을 크게 제한했습니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:36:25

    Android 4.4 이후에는 시스템의 SMS 애플리케이션이 아닌 경우 방송을 잡을 수 없습니다. SMS 차단은 좋지 않습니다

    회신하다
    0
  • 취소회신하다