Насколько практично перехватывать определенные SMS-сообщения в Android, но разрешать другим управлять встроенным приложением для обмена сообщениями? - PullRequest
0 голосов
/ 29 мая 2019

Я разрабатываю приложение для Android, которое позволяет оператору управлять оборудованием с помощью вызовов API, которые отправляются и принимаются с помощью текстовых сообщений.

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

Однако проблема с моим приложением заключается в том, что оно не является приложением SMS по умолчанию, что означает, что эти управляющие сообщения:

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

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

Одним из способов решения этой проблемы является пересылка сообщений во входящие сообщения этого встроенного приложения SMS, но встроенное приложение SMS больше не сможет отправлять сообщения.

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

Неужели у меня нет возможности создать приложение SMS по умолчанию, которое затем могло бы "пересылать" входящее SMS либо во встроенное приложение SMS, либо в мое собственное приложение (для управления вышеупомянутым оборудованием)?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Использовать данные адреса порта (двоичные) SMS. Они перенаправляются прямо в ваше приложение, минуя «приложение SMS по умолчанию». Исходящие двоичные SMS-сообщения также не сохраняются в SENT или OUTBOX «стандартного SMS-приложения», поэтому ваши пользователи их не видят.

См. http://codetheory.in/android-sms/ для получения подробной информации о том, как это сделать, или найдите в Stackoverflow или других сайтах инструкции или инструкции по отправке и получению данных (двоичных) с адресацией порта (*).

0 голосов
/ 29 мая 2019

Android не настроен на работу так, как вы ищете, кроме как до Android 4.4, из-за необузданного злоупотребления. Ваши варианты:

  • Ограничьте пользователей вашего приложения устройствами на Android 4.3 или более старых, в этом случае SMS_RECEIVED трансляция является заказной трансляцией, которую вы можете отменить. Этот подход будет непрактичным из-за небольшого количества активных старых устройств, а также из-за проблем с ограничением распространения этих устройств.

  • Используйте createAppSpecificSmsToken() на SmsManager. Это дает вам маркер, который, если он включен в SMS-сообщение, приводит к тому, что это сообщение перенаправляется в ваше приложение с помощью прилагаемого PendingIntent. Однако это токены одноразового использования, поэтому вам нужно будет указать серверу следующий используемый токен, включая первый токен, который будет использоваться после установки приложения. Это также означает, что у вас есть сервер, способный отслеживать и использовать эти токены, и это может или не может быть частью вашей общей архитектуры системы. Кроме того, createAppSpecificSmsToken() доступно только для API уровня 26+ (Android 8.0 +).

  • Найдите стороннего SMS-клиента, который предлагает интерфейс плагина, и установите плагин, который соответствует вашим требованиям. Затем попросите пользователей этого оборудования переключиться на этого клиента SMS.

  • Добавьте интерфейс плагина в существующий проект клиента SMS с открытым исходным кодом, затем выполните действия, описанные в предыдущем пункте.

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

  • Требуется рутованное устройство и определите магию (например, модуль Xposed), которая позволит вам обрабатывать SMS-сообщения по своему вкусу. Я предполагаю, что это возможно, поскольку существует множество творческих способов использования root, хотя я не знаю, возможна ли эта конкретная вещь.

  • Создайте пользовательское ПЗУ, которое будет обрабатывать SMS-сообщения по вашему вкусу, а затем попросите пользователей этого оборудования установить это пользовательское ПЗУ.

...