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

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

5 ответов

Да.

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

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

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

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


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

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

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

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

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

Вот и все

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

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

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

/**
 * 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);
    }
}

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

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

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

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

Другие вопросы по тегам