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
的进程通信时出错。
发送 intent
且 intent 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
意味着与我的应用程序无关的另一个应用程序可以访问它
用户在安装我的应用程序后首次登录时会出现此错误。但是在下次启动时(当用户已经登录时)应用程序运行正常。
在我的应用程序中,我使用 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
的进程通信时出错。
发送 intent
且 intent 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
意味着与我的应用程序无关的另一个应用程序可以访问它