android - 如何修复 "IntentReceiver components are not allowed to bind to services"

标签 android android-intent broadcastreceiver android-service

我在 logcat 中找不到此错误的来源(“IntentReceiver 组件不允许绑定(bind)到服务”)。抱歉,我粘贴了大部分 logcat,但主要错误是粗体

请注意,在 logcat 错误列表中对我的代码的第一个引用是一个 AsyncTask,它本身是从一个从 BroadcastReceiver 调用的 IntentService 调用的。

04-17 07:46:03.163: W/dalvikvm(23525): threadid=24: thread exiting with uncaught exception (group=0x417582a0) 04-17 07:46:03.173: D/AccountsActivity(23525): onRequestDone 04-17 07:46:03.178: E/AndroidRuntime(23525): FATAL EXCEPTION: AsyncTask #2 04-17 07:46:03.178: E/AndroidRuntime(23525): java.lang.RuntimeException: An error occured while executing doInBackground() 04-17 07:46:03.178: E/AndroidRuntime(23525): at android.os.AsyncTask$3.done(AsyncTask.java:299) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 04-17 07:46:03.178: E/AndroidRuntime(23525): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.lang.Thread.run(Thread.java:856) 04-17 07:46:03.178: E/AndroidRuntime(23525): Caused by: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to bind to services 04-17 07:46:03.178: E/AndroidRuntime(23525): at android.app.ReceiverRestrictedContext.bindService(ContextImpl.java:178) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:192) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:217) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:836) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.my_package.ServerRequests$11.doInBackground(ServerRequests.java:378) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.my_package.ServerRequests$11.doInBackground(ServerRequests.java:1) 04-17 07:46:03.163: W/dalvikvm(23525): threadid=24: thread exiting with uncaught exception (group=0x417582a0) 04-17 07:46:03.173: D/AccountsActivity(23525): onRequestDone 04-17 07:46:03.178: E/AndroidRuntime(23525): FATAL EXCEPTION: AsyncTask #2 04-17 07:46:03.178: E/AndroidRuntime(23525): java.lang.RuntimeException: An error occured while executing doInBackground() 04-17 07:46:03.178: E/AndroidRuntime(23525): at android.os.AsyncTask$3.done(AsyncTask.java:299) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 04-17 07:46:03.178: E/AndroidRuntime(23525): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.lang.Thread.run(Thread.java:856) 04-17 07:46:03.178: E/AndroidRuntime(23525): Caused by: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to bind to services 04-17 07:46:03.178: E/AndroidRuntime(23525): at android.app.ReceiverRestrictedContext.bindService(ContextImpl.java:178) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:192) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:217) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:836) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.my_package.ServerRequests$11.doInBackground(ServerRequests.java:378) 04-17 07:46:03.178: E/AndroidRuntime(23525): at com.my_package.ServerRequests$11.doInBackground(ServerRequests.java:1) 04-17 07:46:03.178: E/AndroidRuntime(23525): at android.os.AsyncTask$2.call(AsyncTask.java:287) 04-17 07:46:03.178: E/AndroidRuntime(23525): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 04-17 07:46:03.178: E/AndroidRuntime(23525): ... 5 more

logcat 中对“doInBackground”的引用是对我的(不是 Android 操作系统)代码的唯一引用,并且只是 Google Cloud Endpoint 调用:

uEndpoint.doRegistration(registrationId).execute();

我定义的广播接收器中没有任何显式的“bindService”调用。

我在哪里可以非法绑定(bind)服务?关于从何处查找此问题的任何想法?

谢谢。

最佳答案

问题来自 IntentService 中 GoogleAccountCredential 的不正确使用。 IntentService 从启动它的 BroadcastReceiver 获取它的 Context 对象。这个 BroadcastReceiver 有一个“ReceiverRestrictedContext”。在

中使用此受限上下文
GoogleAccountCredential.usingAudience(context,.,.)  //-- this context was a "ReceiverRestrictedContext" 

在端点执行中使用凭据之前不会抛出异常。

我用

修复了它
GoogleAccountCredential.usingAudience(getApplicationContext(),.,.)

在 IntentService 中。

关于android - 如何修复 "IntentReceiver components are not allowed to bind to services",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070486/

相关文章:

安卓 : shrinkResources is failing to build

android - Android 设备重启后广播接收器不工作

android - eclipse 中的 gen 文件夹中缺少 R.java 文件

java - 获取选中的单选按钮值

ios - 你能在浏览器中创建一个深层链接以在 instagram 中打开 "share to story"吗?

android - 转到最喜欢的联系人的 Intent URI

android - "Quick shortcut maker"和 "App shortcut maker"是如何工作的?

android - 请求方连接更改不会触发

Android:我的 BOOTCOMPLETED 接收类没有启动我的闹钟

android - 使用谷歌播放服务和 FusedLocationProviderClient 的位置更新