繁体   English   中英

在多个Android应用之间共享数据

[英]Share a piece of data between several Android apps

我正在编写一个Android版SDK,将被许多不同的应用程序使用。 每个应用程序都需要知道以前是否安装了另一个使用SDK的应用程序; 第一个将创建一个随机ID(一个cookie)并存储它,所有后来的应用程序必须读取它并重用它。 请注意,将为每个设备重新创建cookie。

我找了很长时间才得到答案; 请在回答之前仔细阅读,因为我已经阅读了很多不同的StackOverflow答案并且已经在互联网上阅读随机博客; 我尝试过很多东西,但都没有用(我会保存链接)。

  • ContentProvider绝对是矫枉过正的。 此外,它需要侵入应用程序的AndroidManifest.xml ,这是我试图避免的。
  • 同样对于服务:需要在AndroidManifest.xml定义,我无法控制并且不想要求更改。
  • 使用外部存储可能是一种选择,但我不想要额外的权限。
  • 直接在getSharedPreferences()中使用SharedPreferences不起作用,因为应用只能访问自己的首选项。
  • 我可以使用createPackageContext(package, MODE).getSharedPreferences()获得一个公共首选项对象。 如果我有一个主程序包和许多数据客户端,这将很好地工作,但实际上我不知道将首先安装的应用程序包 - 它可以是任何一个。 我甚至没有要搜索的包名列表。 传递尚未安装的包名称失败。
  • 按照上面的方法,我试图捎带一些我可以信赖的标准Android应用程序,并将我的偏好存储在那里 - 比如说:

     createPackageContext( "com.android.browser", Context.CONTEXT_RESTRICTED) .getSharedPreferences( "GLOBAL_PREFS", Context.MODE_WORLD_READABLE); 

    但它不起作用:错误读取

     Couldn't create directory for SharedPreferences file /data/data/com.android.browser/shared_prefs/GLOBAL_PREFS.xml 

所以,回顾一下:我需要在一些标准位置存储一段数据(一个短字符串),这样任何其他应用程序都可以去那里阅读它(如果存在的话),它应该可以工作,如果可能的话没有做任何魔术AndroidManifest.xml或请求任何权限。

可能没有任何完美的答案,所以也许最好的解决方案是写入外部存储; 那就这样吧。 为了把事情放到上下文中,显然在iOS上使用设计用于存储安全数据的钥匙串来做这件事是微不足道的。

不幸的是,我所知道的确没有很好的答案。 您已经提出了很好的选项轮廓,最好的方法可能是外部存储。

只是为了抛出一些东西,我想你可以使用一个具有固定名称和世界可读(可能是可写)权限的平面文件。 然后,您必须遍历所有应用程序的目录,并在每个文件夹中检查此已知命名的文件并尝试打开它。

虽然这在理论上可能有效,但请考虑卸载包含“cookie”的应用程序的情况。 那你就没有了。 您可能希望在每个应用程序中创建cookie,将以前cookie的值复制到新cookie。

我实际上没有试过这个,但我想它应该有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM