运维开发网

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

运维开发网 https://www.qedev.com 2020-03-07 15:46 出处:网络 作者:运维开发网整理
我有一个免费的游戏,我正在制作付费版本.免费游戏在我以MODE_WORLD_READABLE模式创建的共享首选项文件中存储整数高分.如果安装了免费版本,付费版本需要复制此分数. 我正在使用的代码如下: Context c = paidContext.createPackageContext("my.app.packagename", Context.CONTEXT_IGNORE_SECURITY)
我有一个免费的游戏,我正在制作付费版本.免费游戏在我以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的一个特色?是否有一些我不知道的应用权限?我该如何进一步诊断?

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

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

0

精彩评论

暂无评论...
验证码 换一张
取 消