尝试拍照时找不到包含 /storage/emulated/0/Pictures/NoteTaking/IMG_20170226_231007.jpg 的已配置根目录

Getting Failed to find configured root that contains /storage/emulated/0/Pictures/NoteTaking/IMG_20170226_231007.jpg while trying to take a photo

我正在尝试制作一个应用程序来拍摄照片并使用模拟器而不是设备来显示它。我按照 android doc:

中的步骤操作

第 1 部分)这是我的代码卡住的地方:file = FileProvider.getUriForFile(this, "edu.android.notetakingapplication.provider", createFileDir());

这部分在 Mainxml 中

    if (!mediaStorageDir.exists()){
        if (!mediaStorageDir.mkdirs()){
            Log.d("NoteTaking", "failed to create directory");
            return null;
        }
    }

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    return new File(mediaStorageDir.getPath() + File.separator +
            "IMG_"+ timeStamp + ".jpg");
}

这是我的应用程序清单文件的提供商部分

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

<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="edu.android.notetakingapplication.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>

和provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="Android/data/edu.android.notetakingapplication/files/Pictures"/>
</paths>

第 2 部分)如果我保持 provider_paths 如此

 <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>

我可以打开相机应用程序,拍照并在同一页面上查看它,但是,问题是,我正在将路径存储到数据库中并尝试检索页面上的所有图像。这是它给出错误的时间:

Unable to decode stream: java.io.FileNotFoundException: /external_files/Pictures/NoteTaking/IMG_20170226_230608.jpg (No such file or directory)

试试这个肯定有用:

Uri mImageCaptureUri;
private void operCamera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
            "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));

    intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

    intent.putExtra("return-data", true);

    startActivityForResult(intent, 1);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1 && mImageCaptureUri != null && resultCode != 0) {
        if (mImageCaptureUri != null) {
            String path1 = mImageCaptureUri.getPath();
            if (path1 != null) {
                File file1 = new File(path1);
                Uri capturedUri = Uri.fromFile(file1);//here you get the URI
                //you can easily get the path from URI if you need
            }
        }
    }
}

Unable to decode stream: java.io.FileNotFoundException: /external_files/Pictures/NoteTaking/IMG_20170226_230608.jpg (No such file or directory)。当然,您会收到该错误,因为它是 File 对象或文件流的无效路径。您以错误的方式将 uri 保存到数据库。你最好保存 File:getAbsoluthePath() 而不是 Uri:getPath()。