在这种情况下可以使用 SharedPreferences 吗?
不。
您不能将 SharedPreferences 写入任意位置。您能做的最好的事情就是拥有一个始终安装的中央应用程序(如“加载程序”或“主菜单”)。然后所有其他应用程序可以使用中央应用程序的首选项空间来存储和共享设置(通过 createPackageContext)。但是 createPackageContext 不适用于实际未安装的包(例如,“com.mystuff.centralstorage”必须是实际安装的包,而不是任意名称)
在这种情况下,最好的解决方案可能是 SD 卡上的 Java 风格的共享文件。请参阅:FileInputStream、FileOutputStream、DataInputStream 和 DataOutputStream,用于处理小型、简单的文本文件,可能存储首选项。此外,用于 SD 卡根路径的 Environment.getExternalStorageDirectory.getAbsolutePath(事实上,这是处理文件所需的唯一 Android 代码——其余的可以是 Java)。
Android ContentProviders 似乎更适合单个应用程序。允许进行一些共享(如上所述,使用 SharedPerferences),但它们似乎接受了 Android“沙盒”概念,每个应用程序都生活在自己的私人世界中,并在它们之间共享,这不是这里想要的。此解决方案需要任何数量的应用程序都可以全局访问,SD 卡上的常规旧文件将是。
(多进程友好的文件保护方案是另一件需要考虑的事情。)