如何使Environment.getExternalStoragePublicDirectory()创建SD卡的路径,而不是到模拟/ 0(内部内存)的路径?

时间:2018-07-13 14:54:15

标签: java android android-storage

我创建一个文件夹,然后使用Environment.getExternalStoragePublicDirectory()将文件放入该文件夹。但是,它正在创建一个名为/storage/emulated/0的文件夹路径。我在SD卡上搜索了我的文件名,但是没有。因此,我确定/storage/emulated/0已放置在手机的内部存储器中。但是根据Android Doc,外部存储器表示SD卡。

例如,屏幕截图存储在SD卡上,我可以通过以下操作找到它:转到Android“下载”应用-> SD卡->图片->屏幕截图:

enter image description here

这是我的代码,即创建文件夹路径,然后通过附加存储照片的时间为单个照片创建唯一文件路径的方法:

public File getPublicDir() {
// Get the directory for the user's public pictures directory.
File file = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM),"collage");
if (!file.mkdirs()) {
    Log.e("PUBLIC DIRECTORY", "Directory not created");
}
return file;
}

try{
Calendar calendar= Calendar.getInstance();
SimpleDateFormat sdformat=new SimpleDateFormat("MM_dd_yyyy_HH:mm:ss");
String DateString=sdformat.format(calendar.getTime());
file=new File(getPublicDir(),"mySnapshot_"+DateString+".png");
FileOutputStream fos=new FileOutputStream(file);
Boolean success=snapshot.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
Toast.makeText(MainActivity.this,"Compress? 
  :"+file,Toast.LENGTH_SHORT).show();
}catch(IOException e){
  e.printStackTrace();
  Toast.makeText(MainActivity.this,"NOT SAVED",Toast.LENGTH_SHORT).show();
}

编辑

我尝试运行String secStore = System.getenv("SECONDARY_STORAGE");,但是secStore为空。来自this Stack answer

我尝试手动键入通向SD卡的文件夹地址(如上图所示):

String dir="/document/3464-6161:collage";
file=new File(dir,"mySnapshot_"+DateString+".png");

但是它给了我这个错误:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用getExternalStorageDirectory()并为Request permission提供Manifest.permission.WRITE_EXTERNAL_STORAGE来访问外部SD卡

或者,您可以使用StorageManager.getStorageVolumes()来了解设备中可用的可用卷。 它将返回有关StorageVolume的信息,例如SD卡和USB。

注意:可从API 24获得。

使用它可以访问所需的文件路径。