Почему Java неверна, если вы не программируете на Java на Android?
jitter
3
Это пахнет злом. Вы не должны этого делать.
MattC
43
Есть законное использование! Например, если вы хотите что-то сделать (отправить GPS-координаты, стереть данные или что-то еще) на своем телефоне через SMS в случае его кражи; Вы же не хотите, чтобы тот, кто украл телефон, увидел это SMS-сообщение.
Полиглот
21
Да ладно люди! Это определенно НЕ «зло». @polyglot прав! Я делаю приложение для подтверждения номера пользователя (как это делают Viber) и он мне нужен. Все можно использовать как «зло». Не устанавливайте злые приложения, просто так.
Фелипе
Ответы:
187
Да.
Несмотря на некоторую негативную реакцию на этот вопрос, перехват SMS имеет законное применение. Например: автоматизация проверки номера телефона, услуги, которые предоставляются через SMS (хотя, как правило, это должно выполняться с помощью SMS с данными) или для приложений, которые иным образом улучшают взаимодействие с пользователем, обрабатывая специально отформатированные сообщения, чтобы отображать их в красивом Android. -специфический пользовательский интерфейс.
Начиная с Android 1.6, входящие широковещательные сообщения SMS ( android.provider.Telephony.SMS_RECEIVED) доставляются как « заказанные широковещательные сообщения » - это означает, что вы можете указать системе, какие компоненты должны получать широковещательные сообщения первыми.
Если вы определите android:priorityатрибут для прослушивания SMS <intent-filter>, вы получите уведомление перед собственным приложением SMS.
На этом этапе вы можете отменить трансляцию, чтобы предотвратить ее распространение в другие приложения.
О Боже. Это верно! Я всегда думал, что все будет наоборот! Для доказательства смотрите здесь . Вот это да. Хотел бы я дать вам больше одного голоса;)
Хэми
1
@kakopappa: Да, как уже упоминалось в ответе, он работает с Android 1.6+.
Кристофер Орр
1
@herom У меня есть приложения, которые используют приоритет 1000, так что это возможно. Фактически, Handcent использует приоритет 2147483647.
Кристофер Орр,
2
Это сработало для меня :) Сначала мое приложение перехватило сообщение, а уведомления нет, но затем смс не попадает в почтовый ящик сообщений. Вроде так и не получил, только в моем приложении. Есть ли способ использовать прерывание трансляции, но получать сообщения во входящие?
pandabear
7
Важно помнить о новом уровне API 19, как говорит @ChristopherOrr в своем обновлении. Там сказано "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.".
GoRoS
11
Шаг 1: Создайте свой собственный широковещательный приемник для приема смс. напишите логику, чтобы прервать самое широкое, чтобы сообщение не было доступно для вашего почтового ящика
Поскольку широковещательная рассылка SMS - это заказная рассылка, получатель с высоким приоритетом получит ее первым, поэтому ваше приложение получит первое, а после получения вы прерываете рассылку. Так что никакое другое приложение не может его получить. Следовательно, смс не будет во входящих
можем ли мы иметь широковещательный приемник, когда пользователь нажимает на папку входящих сообщений, чтобы я мог разработать экран блокировки ..
Вамси Паван Махеш
9
Приведенное ниже решение («android: priority» и abortBroadcast ()) работает до тех пор, пока приложение Android Messaging по умолчанию (я имел в виду стандартное приложение Android Messaging). Если пользователь устанавливает «GoSMSPro» или «HandcentSMS», эти приложения по-прежнему показывают сообщения в папке «Входящие», я полагаю, это из-за «android: priority». Я не вижу лучшего способа решить указанную выше проблему, если на телефоне установлены сторонние приложения для обмена сообщениями.
Хорошая точка зрения. Но это должен быть комментарий, а не ответ. Можно ли его переместить? --- а что, если поставить очень большое значение? Как android: priority = "9999"? например? Вы пробовали это?
Фелипе
4
@FelipeMicaroniLalli на самом деле GO SMS PRO и т.д ... используйте 2147483647 в качестве приоритета
@NomanHamid Это верно. 999 - это максимальный приоритет. Вы можете использовать любой номер, который выберете, однако Android гарантирует только до 999. Все, что больше этого, может быть или не быть нестабильным и иметь непредвиденные последствия. Лично мне пришлось использовать 2147483647, чтобы попробовать пройти через такие приложения, как GO SMS PRO. Иногда это работало для пользователей, а иногда нет.
Если у вас есть подобный сценарий, и вы хотите удалить или проигнорировать сообщение, связанное с этим контактным номером «+ 44xxxxx» и т. Д., Используйте этот код в приемнике SMS Broadcast.
Ответы:
Да.
Несмотря на некоторую негативную реакцию на этот вопрос, перехват 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: Создайте свой собственный широковещательный приемник для приема смс. напишите логику, чтобы прервать самое широкое, чтобы сообщение не было доступно для вашего почтового ящика
Шаг 2 Зарегистрируйте широковещательный приемник в AndoridManifest и установите для android: priority большое число.
Это оно
Как работает приведенный выше код
Поскольку широковещательная рассылка SMS - это заказная рассылка, получатель с высоким приоритетом получит ее первым, поэтому ваше приложение получит первое, а после получения вы прерываете рассылку. Так что никакое другое приложение не может его получить. Следовательно, смс не будет во входящих
источник
Приведенное ниже решение («android: priority» и abortBroadcast ()) работает до тех пор, пока приложение Android Messaging по умолчанию (я имел в виду стандартное приложение Android Messaging). Если пользователь устанавливает «GoSMSPro» или «HandcentSMS», эти приложения по-прежнему показывают сообщения в папке «Входящие», я полагаю, это из-за «android: priority». Я не вижу лучшего способа решить указанную выше проблему, если на телефоне установлены сторонние приложения для обмена сообщениями.
источник
Проверьте приоритет и установите более высокий приоритет (в вашем манифесте), чем у других получателей.
источник
Если у вас есть подобный сценарий, и вы хотите удалить или проигнорировать сообщение, связанное с этим контактным номером «+ 44xxxxx» и т. Д., Используйте этот код в приемнике SMS Broadcast.
Вы также должны установить ему высокий приоритет.
источник