我试图允许用户访问他的照片库以获取个人资料图片,并将该个人资料图片保存到SharedPreferences.我还有一个导航栏,可从SharedPreferences获取此图片
我收到以下错误:
java.lang.SecurityException: Permission Denial: opening provIDer com.androID.provIDers.media.MediadocumentsProvIDer from ProcessRecord{a601c1c 3379:com.example.anishdalal.finalapp/u0a60} (pID=3379, uID=10060) requires androID.permission.MANAGE_documentS or androID.permission.MANAGE_documentS
这是获取图片的代码:
主要活动
ImageVIEw prof_pic = (ImageVIEw) header.findVIEwByID(R.ID.profPic); pref = getSharedPreferences(Profile.pref_filename, 0); String uri = pref.getString("target_uri", ""); TextVIEw tv_name = (TextVIEw) header.findVIEwByID(R.ID.tv_name); String name = pref.getString("name", ""); if(!uri.equals("")) { Uri urii = Uri.parse(uri); try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openinputStream(urii)); tv_name.setText(name); prof_pic.setimageBitmap(bitmap); } catch (fileNotFoundException e) { } } else { prof_pic.setimageResource(R.drawable.ic_androID_black_24dp); } }profile_pic.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { /* Intent intent = new Intent(Intent.ACTION_PICK, androID.provIDer.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, 0); */ Intent intent; if (Build.VERSION.SDK_INT < 19) { intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); startActivityForResult(intent, KITKAT_VALUE); } else { intent = new Intent(Intent.ACTION_OPEN_document); intent.addcategory(Intent.category_OPENABLE); intent.setType("*/*"); startActivityForResult(intent, KITKAT_VALUE); } } });@OverrIDe public voID onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == KITKAT_VALUE) { if (resultCode == RESulT_OK) { targetUri = data.getData(); //Bitmap bitmap; try { bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openinputStream(targetUri)); /* SharedPreferences.Editor edit = pref.edit(); edit.putString("target_uri", targetUri.toString()); edit.apply(); */ sTargetUri = targetUri.toString(); profile_pic.setimageBitmap(bitmap); } catch (fileNotFoundException e) { // Todo auto-generated catch block e.printstacktrace(); } } } }
这是我的清单
<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID" package="com.finalapp"> <uses-permission androID:name="androID.permission.READ_EXTERNAL_STORAGE" /> <uses-permission androID:name="androID.permission.MANAGE_documentS" /> <application androID:allowBackup="true" androID:icon="@mipmap/ic_launcher" androID:label="@string/app_name" androID:supportsRtl="true" androID:theme="@style/Apptheme"> <activity androID:name=".MainActivity" androID:label="@string/app_name" androID:theme="@style/Apptheme.NoActionbar"> <intent-filter> <action androID:name="androID.intent.action.MAIN" /> <category androID:name="androID.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity androID:name=".JobVIEwActivity"></activity> </application></manifest>
解决方法:
public static final int galLERY_INTENT_CALLED = 1; public static final int galLERY_KITKAT_INTENT_CALLED = 2;if (Build.VERSION.SDK_INT <19){ Intent intent = new Intent(); intent.setType("*/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, galLERY_INTENT_CALLED); } else { Intent intent = new Intent(Intent.ACTION_OPEN_document); intent.addcategory(Intent.category_OPENABLE); intent.setType("*/*"); startActivityForResult(intent, galLERY_KITKAT_INTENT_CALLED); }public voID onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESulT_OK) { Uri originalUri = null; if (Build.VERSION.SDK_INT < 19) { originalUri = data.getData(); } else { originalUri = data.getData(); final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); try { getActivity().getContentResolver().takePersistableUriPermission(originalUri, takeFlags); } catch (SecurityException e){ e.printstacktrace(); } } try { bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openinputStream(originalUri));...
总结 以上是内存溢出为你收集整理的权限拒绝:打开提供程序com.android.providers.media.MediaDocumentsProvider全部内容,希望文章能够帮你解决权限拒绝:打开提供程序com.android.providers.media.MediaDocumentsProvider所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)