将Drawable下的图像保存到存储中

时间:2017-10-20 17:22:35

标签: android

我的drawable文件夹下有一个png文件,我想把它保存到物理设备的某个文件夹中。

我已经拥有写权限和所有内容,但我不能总是做我想要的。有趣的是,如果我尝试10次保存图像,它会以某种方式管理两次,而不是更多。

我正在使用LG 3,Android 5.0,API 21.当我昨天尝试时它没有保存图像但是今天当我浏览图库时我看到了图像..

我还设法使用API​​ 22将图像保存在模拟器中,但从未使用API​​ 24保存。

这是代码:

ActivityCompat.requestPermissions(ShareActivity.this,new String[] {android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1);

Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.instagram_logo);

File path = Environment.getExternalStorageDirectory();


File dir = new File(path + "/savehere/");
if(!dir.exists())
{
    dir.mkdirs();
}
else
{
    Toast.makeText(mContext, "Directory already exists", Toast.LENGTH_SHORT).show();
}


File file = new File(dir,"photo.png");

OutputStream out = null;

try
{
    out = new FileOutputStream(file);
    image.compress(Bitmap.CompressFormat.PNG,80,out);
    out.flush();
    out.close();

}
catch (FileNotFoundException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:0)

您需要确保您在清单中拥有写入权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

您需要检查外部存储器是否可用,这可能是SD卡。检查一下。

public boolean isExternalStorageWritable() {
 String state = Environment.getExternalStorageState();
  if (Environment.MEDIA_MOUNTED.equals(state)) {
     return true;
  }
  return false;
}

完成后,使用以下函数获取实际存储文件的位置。

String filename = "SampleFile.png";
String filepath = "MyFileStorage";
File myExternalFile = new File(getExternalFilesDir(filepath), filename);
FileOutputStream fos = new FileOutputStream(myExternalFile);
image.compress(Bitmap.CompressFormat.PNG,80,fos);
out.flush();
out.close();

Android External Storage – Read, Write, Save FileSaving Files Android Developer

借来的代码