Android 权限拒绝:从pid=-1访问服务组件信息{…}
我正在尝试使用谷歌的活动识别服务。几天前,一切都很顺利,即我可以连接并使用该服务获取活动信息。但今天我发现我再也收不到了。查看日志后,我发现以下错误:Android 权限拒绝:从pid=-1访问服务组件信息{…},android,permissions,google-play-services,Android,Permissions,Google Play Services,我正在尝试使用谷歌的活动识别服务。几天前,一切都很顺利,即我可以连接并使用该服务获取活动信息。但今天我发现我再也收不到了。查看日志后,我发现以下错误: 05-15 21:19:27.196: W/ActivityManager(765): Permission Denial: Accessing service ComponentInfo{edu.umich.si.inteco.captureprobe/edu.umich.si.inteco.captureprobe. contextma
05-15 21:19:27.196: W/ActivityManager(765): Permission Denial: Accessing service
ComponentInfo{edu.umich.si.inteco.captureprobe/edu.umich.si.inteco.captureprobe.
contextmanager.ActivityRecognitionService} from pid=-1, uid=10220 that is not exported
from uid 10223
我重新启动了手机,然后它又工作了。然而,在我重新安装应用程序后,同样的问题再次出现。谁能指出“真正”的问题是什么?它是否与“pid=-1”有关?我在清单文件中有权限
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
我在谷歌上寻找答案,但大多数问题是他们没有在清单文件中放置权限。在我看来,这只是一个不同的问题……有人能帮我吗?谢谢
更新:
问题总是可以通过重新启动手机来解决。但是,当我卸载应用程序并通过Eclipse重新安装时,它总是重新出现。一种始终如一但又怪异的模式(至少对我来说是这样)。我想知道手机是否会记住这个应用程序,并在我卸载它后停止它访问Google Play服务(或者由于某种原因Google Play服务不允许我的应用程序访问它)。有什么想法吗?我想出了解决办法。原因是两方面的结合:
有趣的是,相同的代码可以在Android 4.3或更低版本上运行。我在四款不同Android版本的手机上测试了我的代码,卸载/重新安装问题只发生在Android 4.4手机上。这就是为什么我对这个问题感到困惑的原因。为什么以前没有发生过?无论如何,如果您遇到相同的问题(即,相同的应用程序在重新安装服务后无法使用服务),请检查“导出”标志。这不是特定于活动识别;这显然是4.4中的一个安全改进,PendingEvents在系统中注册,更好的解决方案似乎是取消当前的挂起意图(使用PendingEvent.FLAG_cancel_current)
是的。导出服务的唯一潜在问题是,恶意应用程序可以访问该服务。最好是创建一个ActivityRecognitionService来验证任何识别结果并将其转发给内部服务。这如何回答OP的问题?
<service
android:name="edu.umich.si.inteco.captureprobe.contextmanager.ActivityRecognitionService"
android:enabled="true"
android:exported="true"
>
</service>