从sdcard读取位图

时间:2017-05-09 14:42:18

标签: android bitmap sd-card

我通过裁剪意图在SD卡中保存了一个位图文件,我想在另一个活动中阅读它。但是,我一直得到以下运行时错误:无法解码流:java.io.FileNotFoundException:file:/sdcard/oc.jpg:open failed:ENOENT(没有这样的文件或目录) E / ReadFile:位图必须为非空

Uri uri=Uri.parse("file:///sdcard/oc.jpg");
//save output image in uri
cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 

在另一项活动中读取同一文件:

Bitmap image4 = BitmapFactory.decodeFile("file:///sdcard/oc.jpg");

我尝试this solution但它没有用,我得到了相同的运行时错误。

1 个答案:

答案 0 :(得分:0)

您需要写入外部存储空间,确保添加了权限:

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

检查外部存储器是否可用于读写

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

使用公共目录的根目录而不是使用Android的根目录。

如果要在外部存储上保存公共文件,请使用getExternalStoragePublicDirectory()

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

如果要保存应用程序专用的文件,请使用getExternalFilesDir()

    public File getAlbumStorageDir(Context context, String albumName) {
    // Get the directory for the app's private pictures directory. 
    File file = new File(context.getExternalFilesDir(
            Environment.DIRECTORY_DCIM), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, "Directory not created");
    }
    return file;
}

我忘了提及:

decodeFile 需要路径