从三星设备上的/ data复制共享首选项XML文件失败

don*_*221 9 android

我的应用程序中有一个导出功能.这只是一个复制操作,因为我的所有设置都以共享首选项存储.

我只是将/data/data/package.name/shared_prefs/settings.xml中的xml文件复制到SD卡.它对我的HTC愿望很好.但是,它可能无法在三星设备上工作,我尝试复制文件时出现以下错误.

I/System.out( 3166): /data/data/package.name/shared_prefs/settings.xml (No such file or directory) 
in the directory.

任何人都知道如何修复它,还是有另一种简单的方法来存储共享偏好?

谢谢.

Com*_*are 9

从来没有永远不会永远不会永远不会永远不会硬连接路径.

不幸的是,getSharedPreferenceDir()我无处可想.我能想到的最佳解决方案是:

new File(getFilesDir(), "../shared_prefs")
Run Code Online (Sandbox Code Playgroud)

这样,如果设备制造商选择更改分区名称,您将受到保护.

试试这个,看看它是否有帮助.


Kev*_*oil 9

CommonsWare的建议是一个聪明的黑客,但不幸的是它不会起作用.

三星并不总是将shared_prefs目录放在与...相同的父目录中getFilesDir().

我建议测试是否存在(硬编码,包名称除外): /dbdata/databases/<package_name>/shared_prefs/package.name_preferences.xml如果它存在则使用它,否则回到CommonsWare的建议new File(getFilesDir(), "../shared_prefs")或者只是/data/data/<package_name>/shared_prefs/package.name_preferences.xml.

如果用户在没有擦除的情况下从三星rom切换到自定义ROM,则此方法可能会出现问题,因为该/dbdata/databases文件可能未使用但仍然存在.

更多细节

在一些三星设备上,例如运行froyo的Galaxy S系列,设置如下:

/data/data/<package_name>/(lib|files|databases)

有时候那里也有一个shared_prefs,但这只是三星企图迷惑你!不要相信它!(我认为这可能是从2.1升级到2.2的遗留问题,但它可能是用户切换roms的遗留问题.我真的不知道,我只是将两者都包含在我的应用程序的错误报告界面中,有时会看到两个文件).

和:

/dbdata/databases/<package_name>/shared_prefs

这是真正的shared_prefs目录.

但是在Froyo的Galaxy Tab上,这很奇怪.一般来说,你有:/data/data/<package_name>/(lib|shared_prefs|files|databases)

没有/dbdata/databases/<package_name>目录,但似乎系统应用程序确实有: /dbdata/databases/<package_name>/yourdatabase.db

并且/dbdata/databases/<package_name>在您的应用程序卸载时不会删除额外的奖励.如果用户重新安装您的应用程序,请使用SharedPreferences祝您好运!