Можем ли мы удалить SMS в Android до того, как оно попадет в папку «Входящие»? - PullRequest
100 голосов
/ 16 ноября 2009

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

Ответы [ 5 ]

186 голосов
/ 02 апреля 2010

Да.

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

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

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

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


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

11 голосов
/ 25 июня 2013

Шаг-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>

Вот и все

Как работает вышеуказанный код

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

9 голосов
/ 27 июля 2011

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

1 голос
/ 12 мая 2014
/**
 * 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);
    }
}

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

0 голосов
/ 10 декабря 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...