Android 广播接收机接收呼叫的优先级

Android 广播接收机接收呼叫的优先级,android,broadcastreceiver,Android,Broadcastreceiver,我的目的是制作一个广播接收器,在接到呼叫时执行操作。有没有可能比自动呼叫接收更优先 我已经尝试分配了2147483647的优先级,我认为这是最好的,但仍然让我在我的接收器结束之前尝试呼叫 <!-- Receiver de llamadas --> <receiver android:name=".PhoneCall"> <intent-filter android:priority="2147483647"> <action an

我的目的是制作一个广播接收器,在接到呼叫时执行操作。有没有可能比自动呼叫接收更优先

我已经尝试分配了
2147483647
的优先级,我认为这是最好的,但仍然让我在我的接收器结束之前尝试呼叫

<!-- Receiver de llamadas -->
<receiver android:name=".PhoneCall">
    <intent-filter android:priority="2147483647">
        <action android:name="android.intent.action.PHONE_STATE"/>   
    </intent-filter>
</receiver>

此链接回答我:

可接收的广播主要有两类:

  • 正常广播(与Context.sendBroadcast一起发送)是完全异步的。广播的所有接收器都以未定义的模式运行 命令,通常是在同一时间。这更有效,但意味着 接收方不能使用此处包含的结果或中止API

  • 有序广播(与Context.sendOrderedBroadcast一起发送)一次发送给一个接收器。当每个接收器在 反过来,它可以将结果传播到下一个接收器,也可以 完全中止广播,使其不会传递给其他用户 接受者。可以使用控制命令接收器磨合 android:匹配意图过滤器的优先级属性;接受者 具有相同优先级的将以任意顺序运行


像手机一样的广播状态为“正常广播”。据我所知,不可能对我的广播进行优先级排序。有人想办法吗?

事实上,我不认为2147483647是最好的使用价值,因为Android不会理解它,会忽略这个价值。您需要做的是尝试将优先级设置为999,因为我猜1000是最大值。

该值应该小于1000

Android开发者文档:

该值必须是整数,如“100”。数字越高,优先级越高。默认值为0。该值必须大于-1000且小于1000。


我的解决方案是创建两个广播接收器。 第一个接收器用于接收系统发送的广播,其操作为:android.intent.Action.PHONE_STATE。 第一个接收器调用第二个接收器。(第一个接收器将发送一个广播,我发现在所有接收器接收到android.intent.action.PHONE_状态后,第二个接收器将接收该广播。)

详细代码如下所示: 第一个接收器(CallReceiver.java):

第二个接收器(SecondReceiver.java):

AndroidManifest.xml:

<receiver android:name=".CallReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

<receiver android:name=".SecondReceiver" />


有关更多信息,请参阅本谷歌文档。仅供参考,本主题的其他几个stackoverflow答案建议将1000设置为最高优先级整数。Android开发者的IntentFilter文档建议系统高优先级int的最大值为1000。如果是真的,那么你上面的陈述将变成“…并且小于或等于1000。
public class SecondReceiver extends BroadcastReceiver{  
    @Override
    public void onReceive(Context context, Intent intent) {
        String number = intent.getStringExtra(
        TelephonyManager.EXTRA_INCOMING_NUMBER);
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    }
}
<receiver android:name=".CallReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

<receiver android:name=".SecondReceiver" />