Можем ли мы удалить SMS на Android до того, как оно поступит в папку "Входящие"?

Я удаляю SMS из папки "Входящие", но хочу знать: как я могу удалить его до того, как он попадет в папку "Входящие"?

Ответ 1

Да.

Несмотря на некоторые негативные реакции на этот вопрос, есть законные способы использования перехвата SMS. Например: автоматизация проверки номера телефона, услуги, которые предоставляются через SMS (хотя обычно это нужно делать с помощью SMS) или для приложений, которые в ином случае улучшают работу пользователей, обрабатывая специально отформатированные сообщения, чтобы показать их в приятном Android -специфический пользовательский интерфейс.

Начиная с Android 1.6, входящие SMS-сообщения (android.provider.Telephony.SMS_RECEIVED) доставляются как " упорядоченная передача" – что означает, что вы можете сообщить системе, какие компоненты должны получать трансляцию в первую очередь.

Если вы определяете атрибут android:priority в своем SMS-прослушивании <intent-filter>, вы будете получать уведомление перед приложением собственного SMS.

На этом этапе вы можете отменить трансляцию, не допуская ее распространения в других приложениях.


Обновление (октябрь 2013 г.): Когда Android 4.4 поступит, он внесет изменения в API SMS, которые могут повлиять на способность приложения влиять на доставку SMS.
Ознакомьтесь с этой записью в блоге Android Developers для получения дополнительной информации:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

Ответ 2

Шаг-1: Создайте свой собственный приемник вещания для получения смс. напишите логику, чтобы прервать расширение, чтобы сообщение не было доступно для вашего почтового ящика

public class SMSReceiver extends BroadcastReceiver
{
    public void onReceive(Context context, Intent intent)
    {
     if(conditionMatches){
     abortBroadcast();
     }
    }
}

Шаг-2 Зарегистрируйте широковещательный приемник в AndoridManifest и поместите android: значение приоритета большое количество

<receiver android:name=".SMSReceiver" >
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

Thats It

Как работает приведенный выше код

Поскольку широковещательная передача SMS-сообщений - это упорядоченная трансляция, приемник с высоким приоритетом будет получать сначала, чтобы ваше приложение принималось первым, и после получения вы прерываете трансляцию. Поэтому никакое другое приложение не может его получить. Следовательно, смс не будет в папке "Входящие"

Ответ 3

Ниже ( "android: priority" и abortBroadcast()) решение работает до тех пор, пока приложение Android Messaging по умолчанию (я имел в виду приложение Android Messaging). Если пользователь устанавливает "GoSMSPro" или "HandcentSMS", эти приложения по-прежнему отображают сообщения во входящих, я считаю это из-за "android: priority". Я не вижу лучшего способа исправить вышеупомянутую проблему, если на телефоне установлены сторонние приложения для обмена сообщениями.

Ответ 4

/**
 * Check priority
 * @param activity
 */
public static void receiverPriority(Activity activity){

    Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED");
    List<ResolveInfo> infos =  activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0);
    for (ResolveInfo info : infos) {
        System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority);
    }
}

Проверьте приоритет и установите более высокий приоритет (в вашем манифесте), чем другие приемники.

Ответ 5

Если у вас есть такой сценарий, и вы хотите удалить или проигнорировать сообщение, связанное с этим номером контакта "+ 44xxxxx" и т.д., затем используйте этот код в приемнике SMS-вещания

 if(sender.equalsIgnoreCase("+44xxxxxx")
   this.abortBroadCast();

Вы также должны установить для него высокий приоритет.