我在 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/