繁体   English   中英

如何访问手机的外接Micro SD卡?

[英]How to access External Micro SD card of the phone?

有谁知道如何获得手机的SD卡?

我知道有人会告诉我它的getExternalStorageDirectory()Environment.getExternalStoragePublicDirectory()

但不幸的是,它并不总是指向所有型号的外置SD卡。 例如,我在一个三星模型中尝试过它可以正常但另一个没有,LG没有。 而且根据文档也不总是外部SD卡。

这里是,

*“不要在这里混淆”外部“这个词。

此目录最好被视为媒体/共享存储。 它是一个文件系统,可以容纳相对大量的数据,并在所有应用程序之间共享(不强制执行权限)。

传统上这是一张SD卡,但它也可以作为内置存储实现在与受保护的内部存储不同的设备中,并且可以作为文件系统安装在计算机上。“*

在我的应用程序中,我希望用户只使用SD卡。

我怎么能克服这个?

我遇到了同样的问题。 我不知道如何访问外部SD卡位置。 我正在开发一个应用程序,其中我必须访问外部SD卡读取和写入一些东西。 我尝试了不同的方法,包括预定义的android库。 这些是我使用的方法: -

这些是未命中的: -

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File myFile = new File(path, "test.txt"); 

File root = Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath()+"/Download");

File f = getExternalFilesDir(null); 
File file = new File(f,"test.txt");

这些都是访问内部存储“/ storage / sdcard0”或“/ storage / emulated / 0”。 原因是在Android设备中,内部存储器的一部分充当外部存储器。 因此,如果您有大约16 Gb或更高的内部存储空间,并且有一个选项可以使用SD卡扩展设备,那么这是我猜测访问外部SD卡的唯一方法,因为即使是内置的功能和库也是如此android studio将访问内部存储作为外部存储。

最后我用了这个: -

String extFilePath = "/storage/sdcard1/Download";
File myFile = new File(extFilePath, "test.txt");

它起作用了。 所以你看到预先定义的android库/函数失败的地方,我能够用简单的String来完成任务。

除此之外,如果您想检查设备的外部存储路径,请尝试以下方法: -

String sdpath,sd1path,usbdiskpath,sd0path;

if(new File("/storage/extSdCard/").exists())
{sdpath="/storage/extSdCard/";
Log.i("Sd Cardext Path", sdpath);}

if(new File("/storage/sdcard1/").exists())
{sd1path="/storage/sdcard1/";
Log.i("Sd Card1 Path",sd1path);}

if(new File("/storage/usbcard1/").exists())
{usbdiskpath="/storage/usbcard1/";
Log.i("USB Path",usbdiskpath);}

if(new File("/storage/sdcard0/").exists())
{sd0path="/storage/sdcard0/";
Log.i("Sd Card0 Path",sd0path);}

检查这些可能会帮助您了解访问外部SD卡时要选择的路径。 我希望这有助于其他人。

查看CommonsWare关于同一主题的答案https://stackoverflow.com/a/5695129/582571

他提到我们无法区分移动设备的内置外部存储和可移动外部存储。

但是,通过Aleadam回答https://stackoverflow.com/a/6049446/582571,我们只能通过isExternalStorageRemovable()函数检查外部存储是否可移动。

我希望你能有所收获。

您可以在以下条件下检查SD卡是否可用

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

     //Check for the file
     File appFolder = new File(Environment.getExternalStorageDirectory() + File.separator
                + context.getString(R.string.app_name));

     boolean exist = appFolder.exists();
}

可移动存储路径在设备到设备之间是不同的。
可移除路径的示例是:
1. mnt / ext
2. mnt / externalsd
3. mnt / external_sd


我的设备使用mnt / external_sd。

您可以从vold.fstab文件中检查文件的路径。
此文件位于系统文件夹下。
文件的路径是:

“/etc/vold.fstab”

我的最新设备遇到了同样的问题。 然后我发现可以在/ mnt / ext_sdcard /访问可移动SD卡。 它对我有用。 我能够在此位置列出存储在可移动外部SD卡中的所有文件。

以下是代码:new File(“/ mnt / ext_sdcard /”)。listFiles();

您可以通过以下方式获得路径.....

File sdCardRoot = Environment.getExternalStorageDirectory();
        PATH = sdCardRoot.toString();

如果路径不存在,那么你必须通过mkdir()生成路径.....

private File getTempFile(Context context) {
        final File path = new File(Environment.getExternalStorageDirectory(),
                context.getPackageName());
        if (!path.exists()) {
            path.mkdir();
        }
        return new File(path, "new.png");
    }

上面的函数将返回文件...

暂无
暂无

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

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