如何让另一个应用程序访问我的应用程序的数据目录?

时间:2013-11-26 11:18:04

标签: android

假设我有一个名为A的应用程序,其数据目录为:com.example.test 现在我想创建另一个名为B的应用程序来修改com.example.test中的内容。

当然我知道两者都必须共享相同的签名。但我还有什么需要?

基本上我正在尝试设计一个用户可以插入新组件的应用程序。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我认为最安全的方法是使用Content Provider。然后,要从应用程序B访问应用程序A中的文件,您可以在应用程序A中声明ContentProvider并覆盖public ParcelFileDescriptor openFile(Uri uri, String mode)方法。然后,应用程序B可以使用getContentResolver().openInputStream(...)方法通过适当的uri访问位于应用程序A的数据目录中的文件。有关更多信息,请参阅:

http://www.grokkingandroid.com/handling-binary-data-with-contentproviders/

https://stackoverflow.com/a/4336013/1482726

答案 1 :(得分:0)

两个应用都必须在清单中指定相同的用户ID:

  

机器人:sharedUserId

     

将与其他应用程序共享的Linux用户标识的名称。默认情况下,Android会为每个应用程序分配自己唯一的用户ID。但是,如果将此属性设置为两个或多个应用程序的相同值,则它们将共享相同的ID - 前提是它们也由相同的证书签名。具有相同用户ID的应用程序可以访问彼此的数据,并且如果需要,可以在同一进程中运行。

免责声明:我自己从未这样做过,但根据documentation它应该有用。

答案 2 :(得分:0)

您可以使用Context.createPackageContent()获取其他应用程序的上下文并使用CONTEXT_RESTRICTED,然后您可以使用仅具有文件名的openFileOutput。 在AndroidManifest.xml中添加: - 通过使用protectionLevel =“signature”,只有您签名的应用才能访问您的内容提供商,从而访问您的文件。 并在应用程序的AndroidManifest.xml中,写下: -