【问题标题】:Aborting/Cancelling Broadcasts中止/取消广播
【发布时间】:2012-07-30 19:40:20
【问题描述】:

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

  • SmsDisptacher.java 使用可以取消/中止的有序广播。

我不知道的是:

  • 如果为其他应用程序/接收者(例如您自己)取消订购广播。

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

  • 意图过滤器 android:priority="1000"

我已经尝试过取消广播:

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

【问题讨论】:

    标签: android sms broadcast


    【解决方案1】:

    这当然是可能的。 像这样在清单中注册您的接收器:

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

    最后,有可能另一个应用程序注册了一个比你的优先级更高的接收器,因此它在你取消它之前接收到广播。因此,如果所有其他方法都失败了,请尝试使用更高的优先级值。

    【讨论】:

    • 如果我不想触摸清单文件怎么办.... registerReceiver(smsSentReceiver, new IntentFilter(TAG_SENT));" 的方法总是有效吗?@Videre
    • @gumuruh 我希望在运行时使用 Context.registerReceiver 注册接收器只能确保只要应用程序正在运行就可以接收广播。这意味着当接收到消息时,系统不会唤醒“休眠”应用程序,除非它在清单中注册。如果我错了,请有人纠正我。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 有可能,使用您在问题中描述的方法。您是否记得在清单中设置正确的权限?查看您的 logcat 输出以确定系统在何处注册传入的短信,并找出您的接收器不拦截它的原因。
      • 我已经提交了一个完整的答案来澄清
      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多