Можем ли мы удалить 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();
Вы также должны установить высокий приоритет.