Я удаляю SMS из почтового ящика, но хочу знать: как я могу удалить его до того, как оно попадет в почтовый ящик?
Я удаляю SMS из почтового ящика, но хочу знать: как я могу удалить его до того, как оно попадет в почтовый ящик?
Ответы:
Да.
Несмотря на некоторую негативную реакцию на этот вопрос, перехват 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:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
, так что это возможно. Фактически, Handcent использует приоритет 2147483647
.
"Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it."
.
Шаг 1: Создайте свой собственный широковещательный приемник для приема смс. напишите логику, чтобы прервать самое широкое, чтобы сообщение не было доступно для вашего почтового ящика
public class SMSReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(conditionMatches){
abortBroadcast();
}
}
}
Шаг 2 Зарегистрируйте широковещательный приемник в AndoridManifest и установите для android: priority большое число.
<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 Messaging по умолчанию (я имел в виду стандартное приложение Android Messaging). Если пользователь устанавливает «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 Broadcast.
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
Вы также должны установить ему высокий приоритет.