繁体   English   中英

android:查找 sd 卡是否存在

[英]android: finding if sd-card is present

我有问题。 我有一个带有 16gb 内部存储和 2gb sd 卡的银河选项卡。

当我使用 environment.getExternalStorageState 时,它返回已安装。 但是,当我从我的银河选项卡中删除 sd 卡时,它仍然返回已安装,因为它将内部存储视为外部存储。 有什么方法可以区分实际的 SD 卡和内部存储吗?

谢谢

目前似乎没有任何公开的 API 。 您可以通过查看/proc/mounts进行检查,但您的代码将依赖于设备,因为并非所有设备都在同一位置安装辅助外部存储(SD 卡)。

您可能能够确定 sd 卡的安装路径,如果它与系统无关,那么它可能是外部媒体。 尝试在此处查看此链接:

查找外部 SD 卡位置

如果有两个存储选项,我认为/storage/sdcard0/用于内部 sdcard 和/storage/sdcard1/用于外部 sd 卡。 如果您正在检查文件是否存在于任何 sdcard 中,您应该检查所有可能的路径。

String path;    
if(new File("/mnt/sdcard/yourpath").exists()) {
    path="/storage/sdcard/yourpath";
} else if(new File("/storage/sdcard0/yourpath").exists()) {
    path="/storage/sdcard0/yourpath";
} else if(new File("/storage/sdcard1/yourpath").exists()) {
    path="/storage/sdcard1/yourpath";
}

我自己创建了一张支票,它可以工作。 它检查是否存在第二张真正的 SD 卡。 在三星 Galaxy s5 neo、阿尔卡特一键式 5020x 和 HTC One X 上进行了测试。代码应该可以在 KITKAT 设备上运行,因为它使用应用程序默认目录进行检查。

我在主存储上创建了一个默认应用程序路径存储字符串。 然后将“primary”更改为“secondary”,然后尝试创建一个文件夹并检查是否存在。

继承人的代码:

String primaryStorage = Environment.getExternalStorageDirectory().getAbsolutePath();
String secondaryStorage = System.getenv("SECONDARY_STORAGE");
Boolean hasSecondary = false;

String internalSD = getExternalFilesDir(null) + "/test";
String externalSD = internalSD.replace(primaryStorage, secondaryStorage);

            try{
                File dir = new File(externalSD);
                dir.mkdirs();

                if (dir.isDirectory()) {
                    dir.delete();
                    hasSecondary = true;
                }                   
            } catch (Exception e) {
            }

我试试这样

    if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
{

    Log.i("tag", "SDCard is mounted");

    }

或者这个例子会帮助你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM