Прекращение / Отмена трансляций - PullRequest
6 голосов
/ 04 марта 2011

Что я хочу: я хочу первым получать широковещательную рассылку SMS и хочу отменить трансляцию, если SMS представляет интерес только для меня, чтобы трансляция не доходила ни до какого другого приложения / получателя (приложение для обмена сообщениями по умолчанию) так далее.). Что я знаю, это:

  • SmsDisptacher.java использует заказанные трансляции, которые можно отменить / прервать.

Чего я не знаю, так это:

  • Если заказанные трансляции могут быть отменены для других приложений / получателей, т. Е. Кроме вас.

то, что я пытался получить первым, чтобы получить трансляцию:

  • интент-фильтр android: priority = "1000"

Что я уже пытался отменить трансляцию:

  • broadcastReceiver.setResultCode (RESULT_CANCELED)
  • clearAbortBroadcast ()

Ответы [ 3 ]

11 голосов
/ 13 июля 2011

Это, конечно, возможно. Зарегистрируйте получателя в своем манифесте так:

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

В методе onReceive вашего получателя напишите:

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(SMS_RECEIVED)) {
        //do your stuff
        abortBroadcast();
    }
}

Не забудьте установить разрешение на получение SMS-сообщений в манифесте следующим образом:

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

Без правильного набора разрешений он молча завершится со следующим сообщением logcat:

07-13 12:54:13.208: WARN/ActivityManager(201): Permission Denial: receiving Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } to com.mypackage requires android.permission.RECEIVE_SMS due to sender com.android.phone (uid 1001)

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

1 голос
/ 10 июня 2011

это можно сделать, я проверил учебник, пожалуйста здесь и здесь просто прервите трансляцию в верхней части иерархии

0 голосов
/ 04 марта 2011

получил мой ответ http://groups.google.com/group/android-developers/browse_thread/thread/78fecbc156f4a1ea Это невозможно.

...