我正在构建一个应用程序,每次调用电话时都会启动一项服务,第一次创建调用时,广播接收器会启动服务,一切都很好。
但接下来的问题是:一旦我再次运行拨号程序,我就会在 LogCat 中收到以下错误:
10-30 10:10:38.674: E/StrictMode(171): class com.android.phone.OutgoingCallBroadcaster; instances=2; limit=1
我已尝试通过在 onReceive 结束时调用此命令来解决问题:
this.abortBroadcast();
这消除了错误,但也停止了服务再次运行,谁能帮我解决这个问题,或者有没有人经历过这种不便?
这是接收器:
public class OutgoingCallReceiver extends BroadcastReceiver {
public OutgoingCallReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
// Extract phone number reformatted by previous receivers
String phoneNumber = getResultData();
if (phoneNumber == null) {
// No reformatted number, use the original
phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
}
Intent in = new Intent(context, OutgoingCallHandler.class);
context.startService(in);
OutgoingCallHandler.phonenumber = phoneNumber;
}
}
这是 list 中的声明:
<service
android:name=".IncomingCallHandler"
android:label="@string/title_activity_main" >
</service>
<receiver android:name=".OutgoingCallReceiver" >
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
非常欢迎大家的帮助!
最佳答案
不要调用
abortBroadcast()
,因为NEW_OUTGOING_CALL
broadcast是一个 Ordered Broadcast .它有一个 final broadcast receiver需要进行一些后期处理和清理工作。如果
OutgoingCallHandler
仍然存在,您的context.startService(in);
将不会启动您的服务的另一个实例。添加 log message to youronStartCommand
去检查。并且,看看您是否可以避免从onReceive
中保存对
OutgoingCallHandler.phonenumber = phoneNumber;
的引用
关于android - BroadCast Receiver 太多实例 OutgoingCallBroadcaster;实例=2;限制=1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26650437/