1

我正在开发一个具有备份功能的应用程序。我已经成功实现了该功能,但我仍然遇到问题的唯一一个领域是以下......

要检查外部存储的可用性,我们可以使用以下功能来确保 SD 卡存在。

一些 android 型号的手机只有内部存储器。在这种情况下,我应该如何处理这个问题。

public static boolean isExternalStorageWritable(){
    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state)){
        return true;
    }
    return false;
}

public static boolean isExternalStorageReadable(){
    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
        return true;
    }
    return false;
} 

我也知道这将返回 DCIM 文件夹的位置。但我认为这不是存储重要备份文件的最佳位置。

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)

有没有人已经率先解决了这个问题?

4

2 回答 2

1
public class CheckStorage {
    /* Checks if external storage is available for read and write */
    static public boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

    static public boolean isExternalStorageReadable() {
        if (CheckStorage.isExternalStorageWritable()) {
            return true;
        }
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            return true;
        }
        return false;
    }
}
于 2014-08-18T22:32:12.933 回答
0

两者Environment.getExternalStorageState()Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)不会返回到 SD 卡的路径。

API 级别 19之前,没有官方的方式存储在 SD 卡中。但是,许多人可以使用非官方 API 来做到这一点。

Context正式地,在 API 级别 19(Android 版本 4.4 - Kitkat)的类中引入了一种方法。

File[] getExternalFilesDirs (String type)

它返回所有共享/外部存储设备上应用程序特定目录的绝对路径,应用程序可以在其中放置其拥有的持久文件。这些文件是应用程序内部的,通常不会作为媒体对用户可见。

这意味着,它将返回到 Micro SD 卡和内部存储器的路径。通常,第二个返回路径是 micro SD 卡的存储路径。

要检查外部存储的可用性,我们可以使用以下功能来确保 SD 卡存在。

要检查 SD 卡是否可用,您需要使用getExternalStorageState(File)

官方 Android 参考文档说,

共享存储可能并不总是可用,因为用户可以弹出可移动媒体。可以使用检查媒体状态 getExternalStorageState(File)

有关更多详细信息,请访问此链接:getExternalFilesDirs(java.lang.String)

您可能会认为,如果上述两种方法都不会返回到 SD 卡的路径,那么为什么这些方法名称中会出现外部术语。

因为,根据Android Official Docs/Guide External Storage 的意思是,内部存储器和 microSD 卡存储。

用它自己的话来说,

外部存储可以是可移动存储介质(例如 SD 卡)或内部(不可移动)存储。

根据 Google/官方 Android 文档的内部和外部存储术语与我们的想法有很大不同。

于 2016-08-04T07:29:26.850 回答