我有免费游戏,我正在制作付费版本。免费游戏在我以MODE_WORLD_READABLE模式创建的共享首选项文件中存储整数高分。如果安装了免费版本,付费版本需要复制此分数。
我正在使用的代码如下:
Context c = paidContext.createPackageContext("my.app.packagename", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences prefs = c.getSharedPreferences(SHARED_PREF_FILENAME, Context.MODE_WORLD_READABLE);
第一行创建免费应用程序的上下文(如果存在)(否则会出现异常)。第二行获取共享首选项文件。然后我可以使用prefs.getInt获得高分。
问题:这在Android 1.5,2.1,2.3等中运行得很好,但它在Android 3.0或3.1模拟器中对我不起作用。上面的代码运行但getInt始终返回默认值。
这是一个错误吗? Honeycomb的一个特色?是否有一些我不知道的应用权限?我该如何进一步诊断?
答案 0 :(得分:1)
罗伯特对这个问题的评论虽然有帮助但并没有提供答案。为了扩展它,Android不保证可以跨进程访问首选项;实际上,文档(位于SharedPreferences顶部)明确指出不支持进程间访问(即使它有效)。通过使用不同的证书对应用程序进行签名,您可以确保应用程序无法在相同的进程中运行,这是Android的沙盒方法。
对于它的价值,我最初尝试将SharedPreferences与MODE_WORLD_READABLE
一起用作在两个不同签名的应用程序之间访问数据的方法。我最终遇到了问题,因为某些情况下进程间读取不起作用(它似乎是一个操作顺序的事情)。相反,我首先使用Service + AIDL实现实现了我应该做的事情,即进程间通信(IPC)。