无法访问Honeycomb中的“世界可读”首选项

时间:2011-05-30 23:49:39

标签: java android mobile android-3.0-honeycomb

我有免费游戏,我正在制作付费版本。免费游戏在我以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的一个特色?是否有一些我不知道的应用权限?我该如何进一步诊断?

1 个答案:

答案 0 :(得分:1)

罗伯特对这个问题的评论虽然有帮助但并没有提供答案。为了扩展它,Android不保证可以跨进程访问首选项;实际上,文档(位于SharedPreferences顶部)明确指出不支持进程间访问(即使它有效)。通过使用不同的证书对应用程序进行签名,您可以确保应用程序无法在相同的进程中运行,这是Android的沙盒方法。

对于它的价值,我最初尝试将SharedPreferences与MODE_WORLD_READABLE一起用作在两个不同签名的应用程序之间访问数据的方法。我最终遇到了问题,因为某些情况下进程间读取不起作用(它似乎是一个操作顺序的事情)。相反,我首先使用Service + AIDL实现实现了我应该做的事情,即进程间通信(IPC)。