在我的应用程序中,我将图像路径存储在我的SQlite数据库中以供进一步使用.我得到的路径是
content://com.android.providers.media.documents/document/image%3A71964
Run Code Online (Sandbox Code Playgroud)
当我从数据库中检索此路径并尝试从该路径中检索图像时,机器人抛出
java.lang.SecurityException: Permission Denial: opening provider
com.android.providers.media.MediaDocumentsProvider
from ProcessRecord{42c84ec8 23911:com.gots.gb/u0a248} (pid=23911, uid=10248)
requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
Run Code Online (Sandbox Code Playgroud)
根据https://developer.android.com/guide/topics/providers/document-provider.html#permissions我需要通过添加以下代码来保留权限
final int takeFlags = intent.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// Check for the freshest data.
getContentResolver().takePersistableUriPermission(uri, takeFlags);
Run Code Online (Sandbox Code Playgroud)
当我将此代码添加到我的ImageAdapter类时,它扩展了BaseAdapter android抛出
08-21 02:14:38.530: W/System.err(24452): java.lang.SecurityException:
No permission grant found for UID 10248 and Uri
content://com.android.providers.media.documents/document/image:71964
Run Code Online (Sandbox Code Playgroud)
这是我的ImageAdapter代码的相关部分
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView ;
if (convertView == null){
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(185, 185));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, …Run Code Online (Sandbox Code Playgroud) java sqlite android android-4.4-kitkat storage-access-framework