Получать текст в моем приложении, но не хочу, чтобы он отображался в других приложениях SMS - PullRequest
0 голосов
/ 19 марта 2012

Я пытаюсь создать приложение для своей локальной системы шин. У них есть служба, в которой вы можете написать 4-значный идентификатор остановки и посмотреть, когда автобус будет рядом.

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

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

Возможно ли, чтобы ответ был направлен на мое приложение, но не на другие?

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Я думаю, что это возможно. В Android есть два вида трансляции,

  1. Обычные трансляции
  2. заказанные трансляции

Ссылка: BroadcastReceiver

Обычная трансляция не может блокировать, но заказанная может.


SMSReceiver - это заказанные трансляции. В SMSDispatcher.java

void dispatch(Intent intent, String permission) {
    // Hold a wake lock for WAKE_LOCK_TIMEOUT seconds, enough to give any
    // receivers time to take their own wake locks.
    mWakeLock.acquire(WAKE_LOCK_TIMEOUT);
    mContext.sendOrderedBroadcast(intent, permission, mResultReceiver,
            this, Activity.RESULT_OK, null, null);
}

Таким образом, мы можем зарегистрировать широковещательный приемник и установить Android: приоритет большого числа и abortBroadcast() в вашем приемнике. Я думаю, это может сработать.

1 голос
/ 19 марта 2012

Да, это возможно.

Во-первых, в вашем манифесте необходимо установить приоритет вашего приемника на очень высокое значение:

<intent-filter android:priority="999">
  <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter> 

Это гарантирует, что ваше приложениеполучает SMS первым.Затем в своем коде, где вы получаете и обрабатываете SMS, введите следующий код:

this.abortBroadcast();

Это остановит отправку SMS другим получателям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...