Android系统服务无法访问用户数据
我正在 platform/frameworks/base 下编写一个 Android 系统服务,它由 SystemServer 启动,并像 Activity Manager 和 Content Manager 一样作为系统服务运行。该服务可以成功访问和修改用户system
创建的文件,例如/data/data/com.android.providers.settings/databases/settings.db。
但是,该服务无法访问用户应用程序拥有的数据文件。例如,/data/data/com.android.providers.contacts/databases/contacts2.db由用户app_7
拥有,当尝试更改该文件时,它抛出 FileNotFoundException。我想知道为什么系统服务不能修改用户数据,或者可以这样做吗?
非常感谢。
I'm writing an Android system service under platform/frameworks/base, it is launched by SystemServer and runs as a system service like Activity Manager and Content Manager. The service can access and modify files created by user system
successfully, for example, /data/data/com.android.providers.settings/databases/settings.db.
However the service is not able to access data file owned by user applications. For example, /data/data/com.android.providers.contacts/databases/contacts2.db is owned by the user app_7
, when trying to change the file, it throws a FileNotFoundException. I'm wondering why a system service cannot modify user data, or is it possible to do so?
Many thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
据推测,系统服务作为非超级用户帐户运行。从安全角度来看,这通常是一件好事。
如果您想访问联系人,您可以尝试像任何其他 SDK 应用程序一样通过
ContactsContract
内容提供程序来执行此操作。Presumably, the system service runs as a non-superuser account. This is generally a good thing from a security standpoint.
If you want to access contacts, you can try to do so like any other SDK application, via the
ContactsContract
content provider.