Java 拦截android短信进入默认收件箱-BroadcastReceiver

Java 拦截android短信进入默认收件箱-BroadcastReceiver,java,android,broadcastreceiver,android-broadcastreceiver,Java,Android,Broadcastreceiver,Android Broadcastreceiver,我正在使用一些电信API开发一个基于SMS的聊天应用程序。 我只收到来自特定号码的短信,我想知道如何防止短信发送到android的默认收件箱 以下是我的短信接收器的代码 编译SDK:27 public void onReceive(Context context, Intent intent) { Thread.currentThread().setPriority(Thread.MAX_PRIORITY); this.intent = new Intent(

我正在使用一些电信API开发一个基于SMS的聊天应用程序。 我只收到来自特定号码的短信,我想知道如何防止短信发送到android的默认收件箱

以下是我的短信接收器的代码

编译SDK:27

public void onReceive(Context context, Intent intent) {

        Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

        this.intent = new Intent(BROADCAST_ACTION);
        this.context = context;
        chatlogDBAdapter = new ChatlogDBAdapter(context);
        final Bundle bundle = intent.getExtras();

        try {

            if (bundle != null) {

                final Object[] pdusObj = (Object[]) bundle.get("pdus");

                for (int i = 0; i < pdusObj.length; i++) {

                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                    String senderNum = phoneNumber;

                    if(senderNum.equals("77100")){
                        String message = currentMessage.getDisplayMessageBody();

                        Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
                        String timestamp = String.valueOf(System.currentTimeMillis());
                        String[] messagearray = message.split(",", -1);
                        String username = messagearray[0];
                        String messagebody = messagearray[1];

                        chatlogDBAdapter.addMessage(username,username,"username",messagebody,timestamp);

                        msgusername = username;
                        handler.removeCallbacks(sendUpdatesToUI);
                        handler.postDelayed(sendUpdatesToUI, 10);
                    }


                }
                abortBroadcast();
                return;
            }

        } catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" +e);

        }

    }
public void onReceive(上下文、意图){
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
this.intent=新意图(广播动作);
this.context=上下文;
chatlogDBAdapter=新的chatlogDBAdapter(上下文);
final Bundle=intent.getExtras();
试一试{
if(bundle!=null){
最终对象[]pdusObj=(对象[])bundle.get(“pdus”);
对于(int i=0;i
舱单呢

<receiver
            android:name=".IncomingSms"
            android:permission="android.permission.BROADCAST_SMS">
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                <action android:name="android.provider.Telephony.SMS_DELIVER" />
                <action android:name="android.provider.Telephony.SMS_DELIVER_ACTION" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

如何防止短信发送到android的默认收件箱

除非您将应用程序设为默认短信应用程序,否则这是不可能的。从Andriod Kitkat开始,只有SMS默认应用程序能够向提供商写入数据


您可以发送/接收收件箱/发送框中看不到的二进制短信

自KitKat起,只有一个应用程序可以通过
SMS\u DELIVER\u ACTION
直接使用收到的短信

现有应用程序中的SMS_RECEIVED_ACTION broadcast的任何过滤器在Android 4.4上都将继续工作,但仅作为新消息的观察者,因为除非您的应用程序也接收SMS_DELIVER_ACTION broadcast,否则您无法在Android 4.4上向SMS提供商写信