【发布时间】:2018-10-25 04:05:13
【问题描述】:
我按照下面的教程修改了代码 https://medium.com/@egemenhamutcu/fixing-securityexception-requiring-a-valid-contentprovider-on-android-8-1110d840522
我在清单文件中定义了提供程序。
<provider
android:name="com.test.PhotoProvider"
android:authorities="${applicationId}.PhotoProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
provider paths has the below line
<external-path name="/storage/emulated/0" path="/" />
I’m loading the uri using below code
Uri decodedImgUri = PhotoProvider.getPhotoUri(new File(imgPath));
ContentResolver cr = activity.getContentResolver();
cr.notifyChange(decodedImgUri, null);
ImageLoader.getInstance().displayImage(decodedImgUri.toString(), holder.image);
public static Uri getPhotoUri(File file) {
Uri outputUri = Uri.fromFile(file);
Uri.Builder builder = new Uri.Builder()
.authority(CONTENT_PROVIDER_AUTHORITY)
.scheme("file")
.path(outputUri.getPath())
.query(outputUri.getQuery())
.fragment(outputUri.getFragment());
return builder.build();
}
这就是我定义我的权威的方式
public static final String CONTENT_PROVIDER_AUTHORITY = "com.test.PhotoProvider";
但是当我尝试将 uri 加载到图像视图中时,我不断收到以下错误。
java.io.FileNotFoundException:com.test.PhotoProvider/data/user/0/com.test/cache/cropped953508219.jpg:打开失败:ENOENT(没有这样的文件或目录)
即使在
【问题讨论】:
-
嘿 Rajesh,应用程序似乎没有访问存储空间的权限。您能否确认您使用的是 Marshmallow 以上的版本?如果是,则需要动态向用户请求权限。
标签: android android-contentprovider android-8.0-oreo