无法访问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始终返回认值。 这是错误吗?蜂窝功能?有我不知道的某些应用程序权限吗?如何进一步诊断?     

解决方法

        尽管有帮助,但罗曼对问题的评论没有提供答案。为了扩展它,Android不保证首选项可以跨进程访问。实际上,文档(位于SharedPreferences的顶部)明确声明不支持进程间访问(即使有时可行)。通过使用不同的证书对应用程序进行签名,可以确保应用程序无法在同一进程中运行,这是Android的沙盒方法。 出于其价值,我最初尝试使用带有1的SharedPreferences作为使数据在两个不同签名的应用程序之间可访问的方法。由于某些情况下,进程间的读取不起作用(这似乎是一个操作顺序的事情),因此我最终遇到了问题。相反,我首先使用Service + AIDL实现了应该做的事情,即进程间通信(IPC)。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...