我已经编写了代码来备份我sqlite db
的file
Android 手机(Sony Ericsson X-8 w/ 2.1.1 版 Android)。
我将代码放在下面以供参考,但在阅读之前,我强调它在 X-8 上运行良好。[仍然欢迎任何改进建议!] 当我在带有 Android 4.0.4 版的索尼爱立信 Xperia Arc 上运行它时,我遇到了问题。
该文件未写入SD card
. 调试起来非常困难,因为您可能知道,通过 USB 卡将手机连接到计算机可以阻止文件被写入(例如:Android FileWriter not working on Sony Ericsson Arc but works on another phone)。
在任何情况下,通过调试器中的代码都不会出现问题,并且会让人相信文件已被写入。在我的manifest
中,我确实有:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我不知道发生了什么。Android 版本 2 和 4 在文件系统方面是否发生了变化?是手机专用的吗?
任何想法将不胜感激。-戴夫
String packageName = "com.xxx.receiver";
String dbName = "Receiver";
//File sd = Environment.getExternalStorageDirectory();
File sd = new File(Environment.getExternalStorageDirectory(), "xxx"); // "xxx" is never created on Arc!
if (!sd.exists()) {
sd.mkdirs();
}
File data = Environment.getDataDirectory();
if (sd.canWrite())
{
String currentDBPath = "//data//"+ packageName +"//databases//"+ dbName;
String backupDBPath = dbName;
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
//Toast.makeText(SettingsAdapter.this.getContext(), backupDB.toString(), Toast.LENGTH_LONG).show();
}