android - 中止/取消广播

标签 android sms broadcast

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

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

我不知道的是:

  • 如果可以取消其他应用程序/接收器的 orderedBrodcasts,即除您之外的其他应用程序/接收器。

我为第一个收到广播所做的尝试:

  • Intent 过滤器 android:priority="1000"

我已经尝试取消广播:

  • 中止广播();
  • broadcastReceiver.setResultCode(RESULT_CANCELED)
  • clearAbortBroadcast()

最佳答案

当然可以。 像这样在您的 list 中注册您的接收器:

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

请记住像这样在 list 中设置接收短信的权限:

<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)

最后,另一个应用程序可能已经注册了一个比您的优先级更高的接收器,因此它会在您取消之前接收到广播。因此,如果一切都失败了,请尝试使用更高的优先级值进行试验。

关于android - 中止/取消广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5191020/

相关文章:

android - 我和我的团队能够在没有互联网连接的情况下在Android Studio中进行项目吗?

android - 为什么我收到此服务错误?

android - 如何在 SMS 应用程序中查看从我的应用程序内发送的消息?

android - 您可以在 Android 上拦截 MMS SMS 消息并提取图像吗?

Symbian 中的二进制 SMS

c# - 如何获取正在监听特定端口 LAN 的所有服务器的 IP?

android - 如何获取用作热点的 Android 设备的子网掩码?

java - Android 不接收广播 UDP,但接收定向 UDP

android - 不要将项目集中在 gridview 上

java - JSON 没有标识符,我如何从中获取信息?