我正在尝试通过另一个应用程序编辑一个应用程序的SharedPreferences ,我的代码是这样的
try { Context plutoContext = getApplicationContext().createPackageContext("me.test",Context.MODE_WORLD_WRITEABLE); SharedPreferences plutoPreferences = PreferenceManager.getDefaultSharedPreferences(plutoContext); Editor plutoPrefEditor = plutoPreferences.edit(); plutoPrefEditor.putString("country", "India"); plutoPrefEditor.commit(); }
我收到了一个错误
E/SharedPreferencesImpl( 304): Couldn't create directory for SharedPreferences file /data/data/me.test/shared_prefs/me.test_preferences.xml
其中me.test是我在me.test proj中的另一个项目我可以毫不费力地编辑和检索SharedPreferences
我在Nexus S android 4.0.4(三星)上测试它,任何人都可以帮助我
您需要在AndroidManifest.xml中添加权限:
我和你有同样的问题,我用上述解决方案解决了这个问题。
只需在此应用中使用其他包名称即可。 这将在不同的目录中创建首选项。
顺便说一句,(它与问题无关,但无论如何)你错误地使用了createPackageContext()方法。 你在那里传递MODE_WORLD_WRITEABLE标志,其值为2并且等于CONTEXT_IGNORE_SECURITY标志,因此这将被逻辑错误地解释,恕我直言。
如果您的第一个应用程序想要创建可由另一个应用程序读取的SharedPreference,请确保使用正确的模式创建SharedPreference。 有关更多详细信息,请查看getSharedPreferences()或PreferenceManager类。
问题 – 当您已在项目中创建默认共享首选项时,将出现“Android:无法为SharedPreferences文件创建目录”。 因此,存在一个共享首选项,并且再次添加相同名称的默认首选项。 解决方案 – 在应用中仅创建一个默认共享首选项 如果要创建更多共享首选项,请使用某个名称创建共享首选项。
注 – 一个应用中只有一个默认共享首选项。
在我的情况下重启三星设备解决了同样的问题。