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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (1100)

我使用创建文件夹并将文件放在该文件夹中Environment.getExternalStoragePublicDirectory()。但它正在创建一个名为的文件夹路径/storage/emulated/0。我在SD卡上搜索了我的文件名,但有任何一个。所以我确定这/storage/emulated/0是一个放在手机的内存中。但根据Android Doc,外部存储器意味着SD卡。

例如,屏幕截图存储在SD卡上,我可以通过Android“下载”App-> 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当我运行应用程序时为null。

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

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

但它给了我这个错误:

提问于

扫码关注云+社区

领取腾讯云代金券