Перехватить андроид СМС собирается на входящие по умолчанию - BroadcastReceiver - PullRequest
0 голосов
/ 01 июня 2018

Я разрабатываю приложение для чата на основе SMS с использованием Telco APIS.Я получаю SMS-сообщения только с определенного номера и хочу узнать, как можно предотвратить отправку SMS-сообщений на стандартный почтовый ящик Android.

Ниже приведен код моего получателя SMS.

Компиляция 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);

        }

    }

И манифест

<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>

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Начиная с KitKat, только одно приложение может напрямую получать полученные SMS с SMS_DELIVER_ACTION: блогом изменений здесь .

Любые фильтры для трансляции SMS_RECEIVED_ACTION в существующих приложениях будут продолжатьТо же самое работает на Android 4.4, но только в качестве наблюдателя новых сообщений, потому что, если ваше приложение также не получает трансляцию SMS_DELIVER_ACTION, вы не можете писать в провайдер SMS на Android 4.4.

0 голосов
/ 01 июня 2018

как я могу предотвратить отправку SMS-сообщений в папку входящих сообщений Android по умолчанию.

Это невозможно, если вы не установите приложение SMS по умолчанию для своего приложения.Начиная с Andriod Kitkat, только приложение по умолчанию для SMS-сообщений позволяет записывать данные поставщику.

Вы можете отправлять / получать двоичные SMS-сообщения, которые не будут отображаться в поле Входящие / Отправленные

...