gpt4 book ai didi

android - 权限拒绝 : Accessing service ComponentInfo {. ..} 来自 pid=-1

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:59:22 25 4
gpt4 key购买 nike

我正在尝试使用 Google 的 Activity 识别服务。几天前,一切都很顺利,即我可以连接使用该服务来获取 Activity 信息。但是今天我发现我再也收不到了。查看日志后,我发现了这个错误:

 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”有关吗?我在 Manifest 文件中有权限

<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>

我在谷歌上寻找答案,但大多数问题是他们没有在 list 文件中放置权限。在我看来,这只是一个不同的问题......有人可以帮助我吗?谢谢!

更新:这个问题总是可以通过重启手机来解决。但是,当我卸载应用程序并通过 Eclipse 重新安装它时,它总是会重新出现。一致但奇怪的模式(至少对我而言)。我想知道手机是否记住了该应用程序并在我卸载它后停止它访问 Google Play 服务(或者由于某种原因 Google Play 服务不允许我的应用程序访问它)。有什么想法吗?

最佳答案

我找到了解决方案。原因是由于两件事的结合:

  1. 重新安装会生成同一应用程序的新的不同 uid(注意,重新安装是指从手机上卸载该应用程序,然后使用 Eclipse 重新安装)。

    <
  2. 默认情况下,在服务标签中,“exported”的值为 false,如 here 所述

其他应用程序的组件是否可以调用该服务或与之交互 — 如果可以,则为“true”,否则为“false”。当该值为“false”时,只有同一应用程序的组件或具有相同用户 ID 的应用程序才能启动该服务或与之绑定(bind)。默认值取决于服务是否包含 Intent 过滤器。没有任何过滤器意味着它只能通过指定其确切的类名来调用。这意味着该服务仅供应用程序内部使用(因为其他人不知道类名)。所以在这种情况下,默认值为“false”。另一方面,至少一个过滤器的存在意味着该服务供外部使用,因此默认值为“true”。

因此,我只需将标志设置为“true”就解决了我的问题。 (Google Activity Recognition 的示例代码使用值“false”而不是“true”。)

     <service
android:name="edu.umich.si.inteco.captureprobe.contextmanager.ActivityRecognitionService"
android:enabled="true"
android:exported="true"
>
</service>

有趣的是,相同的代码适用于 Android 4.3 或更低版本。我在四款不同Android版本的手机上测试了我的代码,卸载/重装问题只出现在Android 4.4的手机上。所以这就是为什么我一直对这个问题感到困惑。为什么以前没有发生过?无论如何,如果您遇到相同的问题(即相同的应用程序在您重新安装后无法使用服务),请检查“已导出”标志。

关于android - 权限拒绝 : Accessing service ComponentInfo {. ..} 来自 pid=-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com