Я удаляю SMS из папки "Входящие", но хочу знать: как я могу удалить его до того, как он попадет в папку "Входящие"?
Можем ли мы удалить SMS на Android до того, как оно поступит в папку "Входящие"?
Ответ 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();
Вы также должны установить для него высокий приоритет.