java.lang.SecurityException:注册接收者 android.content.IIntentReceiver 时无法找到呼叫者 android.app.ApplicationThreadProxy 的应用程序

java.lang.SecurityException:Unable to find app for caller android.app.ApplicationThreadProxy when registering receiver android.content.IIntentReceiver

用户在安装我的应用程序后首次登录时会出现此错误。但是在下次启动时(当用户已经登录时)应用程序运行正常。

在我的应用程序中,我使用 BroadcastReceiver 用于检查互联网连接。

因此,具体来说,该应用在注册 BroadcastReceiver 时具有上述 Exception。任何帮助将不胜感激!

我的logcat如下

java.lang.RuntimeException: Unable to resume activity {com.android.myproject/com.android.myproject.MapActivity}: java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@43155660 (pid=24211) when registering receiver android.content.IIntentReceiver$Stub$Proxy@43151368
1 at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2762)
2 at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2791)
3 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1288)
4 at android.os.Handler.dispatchMessage(Handler.java:99)
5 at android.os.Looper.loop(Looper.java:137)
6 at android.app.ActivityThread.main(ActivityThread.java:5095)
7 at java.lang.reflect.Method.invokeNative(Native Method)
8 at java.lang.reflect.Method.invoke(Method.java:511)
9 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:845)
10 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
11 at dalvik.system.NativeStart.main(Native Method)
12Caused by: java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@43155660 (pid=24211) when registering receiver android.content.IIntentReceiver$Stub$Proxy@43151368
13 at android.os.Parcel.readException(Parcel.java:1425)
14 at android.os.Parcel.readException(Parcel.java:1379)
15 at android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:2228)
16 at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1356)
17 at android.app.ContextImpl.registerReceiver(ContextImpl.java:1324)
18 at android.app.ContextImpl.registerReceiver(ContextImpl.java:1318)
19 at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:423)
20 at com.android.myproject.MapActivity.onResumeOperations(MapActivity.java:584)
21 at com.android.myproject.MapActivity.onResume(MapActivity.java:618)
22 at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185)
23 at android.app.Activity.performResume(Activity.java:5203)
24 at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2752)

为了澄清我的问题,我的 onResumeOperations() 看起来像

 public void onResumeOperations(){
    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER )&& !isFinishing()) {
        ShowGpsDialog();
    } else {
        removeGpsDialog();
    }

    registerReceiver(internetConnectionReciever, new IntentFilter(
            "android.net.conn.CONNECTIVITY_CHANGE"));
    registerReceiver(GpsChangeReceiver, new IntentFilter(
            LocationManager.PROVIDERS_CHANGED_ACTION));
    isRecieverRegistered = true;

    if (AndyUtils.isNetworkAvailable(this)
            && manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        if (!isDataRecieved) {

            checkStatus();
            startLocationUpdateService();
           // getPreReservations();
        }
    }

    registerIsApproved();

    startRepeatingChecker();
}

这个onResumeOperations()onResume()中被调用。正如我之前提到的,问题发生在注册 internetConnectionReceiver.

此错误表示与另一个处理 Intent 的进程通信时出错。

发送 intentintent extras 太大,超过最大事务大小 (1Mb) 时可能会发生此错误。

不推荐通过 extras 传递高分辨率照片或大文件,最佳做法是将文件保存在外部存储上,获取一个 Uri 引用并将此引用作为 String 在你的意图中额外

yourIntent.putExtra("key", yourUri.toString)

也可以在 activity 标签中尝试 android:exported="true"

<activity
android:name=".your_activity"
android:label="@string/app_name"
android:exported="true">

将导出的标签设置为true意味着与我的应用程序无关的另一个应用程序可以访问它