BroadCast接收器的实例太多OutgoingCallBroadcaster;实例=2;极限=1



我正在构建一个应用程序,每次呼叫时都会启动服务,第一次创建呼叫时,广播接收器就会启动服务,一切都很好。

但问题是:一旦我再次运行拨号程序,我会在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;

    }
}

以下是清单中的声明:

<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广播是有序广播。它有一个最终的广播接收器,需要进行一些后期处理和清理

  • 如果OutgoingCallHandler仍然有效,则您的context.startService(in);将不会启动服务的另一个实例。将日志消息添加到您的onStartCommand中进行检查。并且,看看您是否可以避免从onReceive 中保存对OutgoingCallHandler.phonenumber = phoneNumber;的引用

最新更新