在KitKat中保存到SD卡

时间:2014-05-02 13:37:42

标签: android android-4.4-kitkat

我正在开发一款供执法部门使用的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,这段代码不再适用。我发现的唯一解决方案涉及生根平板电脑,这在我的案例中是不可行的。有解决方法吗?

1 个答案:

答案 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上的那个特别感兴趣。