我正在开发一款供执法部门使用的Android平板电脑应用程序。我让平板电脑将所有数据备份到外部SD卡。我希望能够从卡中恢复数据,以防平板电脑在警察打击犯罪时被摧毁。我使用此代码存储备份:
File file = new File("/mnt/extSdCard/" + NewOrLoad.directoryName + "settings.dat");
try {
bW = new BufferedWriter(new FileWriter(file));
Gson gson = new Gson();
String json = gson.toJson(dreform);
bW.write(json);
bW.close();
} catch (IOException e) {
e.printStackTrace();
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
工作得很好。不幸的是,购买的最新一批平板电脑正在运行KitKat,这段代码不再适用。我发现的唯一解决方案涉及生根平板电脑,这在我的案例中是不可行的。有解决方法吗?
答案 0 :(得分:2)
工作正常
仅适用于存在/mnt/extSdCard
且可写的设备。这超出了Android SDK的范围,并且无法保证任何设备都会遵循该特定路径。也许你处于一个受控环境中,只有一个设备模型,这个假设是(相对)安全的。
有解决方法吗?
正如323go在评论中提到的那样,欢迎你use getExternalFilesDirs()
(注意复数)。如果结果列表中有多个元素,则第二个和后续条目将用于"辅助外部存储"如可移动卡。您可以在没有任何必要权限的情况下从此目录中读取和写入。
还有ContextCompat
,它提供了一个getExternalFilesDirs()
实现,可以一直回到API级别4.它只会在运行低于API级别19的设备上返回一个值,但它允许您自己跳过版本检查,因为大量API Level 19+设备也只返回一个值(例如,他们没有填充卡的SD卡插槽)。
我最近写了a series of blog posts试图澄清存储情况。您可能对removable storage上的那个特别感兴趣。