中止/取消广播

时间:2011-03-04 07:40:29

标签: android sms broadcast

我想要的是:我想成为第一个接收短信广播的人,我想取消广播,如果短信只是我感兴趣的话,那么广播不会到达任何其他应用程序/接收器(默认消息应用程序)等等。)。 我所知道的是:

  • SmsDisptacher.java使用可以取消/中止的orderedBroadcasts。

我不知道的是:

  • 如果orderedBrodcasts可以取消其他应用程序/接收者,而不是你自己。

我试图成为第一个接收广播的人:

  • intent-filter android:priority =“1000”

我已经尝试取消广播了:

  • AbortBroadcast();
  • broadcastReceiver.setResultCode(RESULT_CANCELED)
  • clearAbortBroadcast()

3 个答案:

答案 0 :(得分:11)

当然可以。 在您的清单中注册您的接收器,如下所示:

<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();
    }
}

请记住在清单中设置接收短信息的权限,如下所示:

<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 :(得分:1)

可以这样做,我做了一个教程检查,请herehere 只是中止层次结构顶部的广播

答案 2 :(得分:0)