广播接收器接收呼叫的优先级

时间:2011-04-28 10:28:04

标签: android broadcastreceiver

我的目的是制作一个广播接收器,在接听电话时执行操作。是否有可能比自动呼叫接收SO更优先?

我已经尝试指定2147483647的优先级,我认为这是最好的,但仍然会跳到我接收器结束前尝试通话。

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

4 个答案:

答案 0 :(得分:9)

此链接回答我:

http://developer.android.com/reference/android/content/BroadcastReceiver.html

可以收到两类主要的广播:

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

  •   
  • 有序广播(与Context.sendOrderedBroadcast一起发送)一次传送到一个接收器。当每个接收器执行时   转,它可以将结果传播到下一个接收器,或者它可以   完全中止广播,以便它不会传递给其他人   接收器。运行的订单接收器可以用   android:匹配的intent-filter的priority属性;接收器   具有相同优先级的将以任意顺序运行。

  •   

PHONE_STATE之类的广播是“普通广播”。据我所知,不可能优先考虑我的广播。有没有人想到什么?

答案 1 :(得分:2)

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

答案 2 :(得分:0)

该值应小于1000!

Android开发者文档:

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

http://developer.android.com/guide/topics/manifest/intent-filter-element.html

答案 3 :(得分:0)

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

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

public class CallReceiver extends BroadcastReceiver {   
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent newintent = new Intent(intent);
        newintent.setAction("");
        newintent.setClass(context, SecondReceiver.class);
        context.sendBroadcast(newintent);
    }
}

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

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

的AndroidManifest.xml:

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

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