FileUriExposedException android N及更高版本

时间:2017-10-31 00:08:00

标签: android camera

我设法让我的应用在Android N上运行相机,问题是当我使用相机拍照并点击确定时,它没有返回任何照片进行编辑,ps:'我的应用程序是一个照片编辑器" 。 这是我在代码中所做的更改:

是:

private Uri getImageUri() {
    File file = new File(Environment.getExternalStorageDirectory().getPath(), fname);
    Uri tempURI = Uri.fromFile(file);
    Log.e("URI", ">> " + tempURI);
    return tempURI;
}

它变成了:

private Uri getImageUri() {
    File file = new File(Environment.getExternalStorageDirectory().getPath(), fname);
    Uri tempURI = GenericFileProvider.getUriForFile(getApplicationContext(), getApplicationContext().getPackageName() + ".provider", file);
    //Uri tempURI = Uri.fromFile(file);
    Log.e("URI", ">> " + tempURI);
    return tempURI;
}

和此:

case R.id.ic_camera:
    // root = this.getCacheDir();
    galleryopen = true;
    fname = "Style" + System.currentTimeMillis() + ".jpg";

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());
    startActivityForResult(cameraIntent, SELECT_CAMERA);
    break;

到:

case R.id.ic_camera:
    // root = this.getCacheDir();
    galleryopen = true;
    fname = "Style" + System.currentTimeMillis() + ".jpg";

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());
    startActivityForResult(cameraIntent, SELECT_CAMERA);
    break;

我不知道自己错过了什么,感谢您的帮助,谢谢

1 个答案:

答案 0 :(得分:0)

关于Android 5.1以及最终因为Android 7文件uri被弃用。相反,你必须通过fileprovider使用内容uri。

阅读FileProvider文档以了解有关它的更多信息:https://developer.android.com/reference/android/support/v4/content/FileProvider.html

并搜索内容uri或只搜索术语FileUriExposedException,您将在其他stackoverflow线程中找到一些很好的解释。