2

我创建一个文件夹并使用Environment.getExternalStoragePublicDirectory(). 但它正在创建一个文件夹路径到一个名为/storage/emulated/0. 我在 SD 卡上搜索了我的文件名,但没有。所以我确定那/storage/emulated/0是一个放置在手机内存中的东西。但根据Android Doc,外部存储器是指 SD 卡。

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

在此处输入图像描述.

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

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运行应用程序时为空。这是来自这个堆栈的答案

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

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

但它给了我这个错误:

在此处输入图像描述

4

1 回答 1

2

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

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

注意:它可从 API 24 获得。

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

于 2018-07-13T15:06:28.980 回答