我的目的是制作一个广播接收器,在接听电话时执行操作。是否有可能比自动呼叫接收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>
答案 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" />