图片,如果你会:应用程序A,B,C和D都需要它们之间共享一些数据量小,但也不能保证任何人会被安装。 也就是说,你可能有B和d只。 或只有C,等等。
可以SharedPreferences在这种情况下使用?
我明白,我可以使用createPackageContext有AD都使用的包装空间,如果A是像主应用程序,总是安装,但如果我不知道这些将被安装怎么办? 如果对不存在的包装空间使用createPackageContext返回的NameNotFoundException。
我必须在这种情况下,比SD卡上的文件以外的任何内容提供商的选择吗?
您可以创建在所有四个共享的首选项,如果它只是一个小的数据,并检查是否安装了应用程序或不读它的共享PREF之前。 如何检查应用程序里安装或没有? 和共享应用程序之间的首选项 。
可以SharedPreferences在这种情况下使用?
没有。
你可以不写SharedPreferences到任意位置。 你能做的最好是有一个中心的应用程序(如“装载”或“主菜单”),它总是安装。 然后,所有其他应用程序可以使用中央应用程序的喜好的空间来存储和共享设置(通过createPackageContext)。 但createPackageContext不会为没有实际安装(例如,“com.mystuff.centralstorage”必须是实际的安装包,而不是一个任意名称)包工作
在这种情况下,最好的解决方案可能是SD卡,Java风格上的共享文件。 请参阅:的FileInputStream,FileOutputStream中,DataInputStream和DataOutputStream类处理小,易文本文件,可以存储偏好。 此外,Environment.getExternalStorageDirectory.getAbsolutePath的路径到SD卡的根目录(即,实际上是需要处理的文件仅适用于Android代码 - 剩下的就仅仅是使用Java)。
Android的ContentProviders似乎对单个应用更为适合。 有一些允许共享(如上,与SharedPerferences),但他们似乎,每一个应用程序住在自己的私人世界里,它们之间共享,这是不是在这里需要拥抱Android的“沙箱”的概念。 该解决方案需要通过任何应用数量,这在SD卡上一个普通的旧文件将是全球可访问的东西。
(多进程友好文件保护方案是另一回事思考的问题。)
分享你可以在应用程序之间实现ContentProvider的(或多个)的信息。 您也可以使用一个共同文件的SD卡。 编辑:看来SharedPreferences可以在应用程序之间共享。 见上面的答案。