我面临着同样的问题。我不知道如何访问外部 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 卡时选择什么路径。我希望这对其他人有帮助。