簡體   English   中英

權限拒絕媒體文件提供者

[英]Permission Denial media documents provider

我想從圖庫中選擇圖片,然后保存路徑。 我使用此路徑在RecyclerView顯示圖像。 我使用PicassoImageView下載圖像。 我的問題如下:

當我選擇該圖像正確顯示在RecyclerView ,但是如果我離開屏幕並返回,則會出現此錯誤:

01-19 15:05:18.984 542-840 /? W / ActivityManager:權限拒絕:從...打開提供程序com.android.providers.media.MediaDocumentsProvider需要android.permission.MANAGE_DOCUMENTS或android.permission.MANAGE_DOCUMENTS

並且圖像不再顯示。 這是我的代碼:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>


 AlertDialog.Builder builder = new AlertDialog.Builder(getMainActivity());
    builder.setTitle("Choose Image Source");
    builder.setItems(new CharSequence[] {"Gallery"},
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                            Intent intent;
                            // GET IMAGE FROM THE GALLERY
                            intent = new Intent(Intent.ACTION_GET_CONTENT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                            intent.setType("image/*");
                            intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);   // Show local files only (available since honeycomb, sdkVersion 11)

                            startActivityForResult(Intent.createChooser(intent, "Choose a picture"), Constants.REQUEST_CHOOSE_PHOTO);
                }
            });

    builder.show();


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    ImageDb image = new ImageDb();
    if (resultCode == Activity.RESULT_OK) {
        switch (requestCode) {  
            case Constants.REQUEST_CHOOSE_PHOTO:
                image.setImageFilePath(data.getData().toString());

                break;
        }
        images.add(image);
    }
}


 @BindingAdapter({"url", "size"})
public static void loadImage(ImageView imageView, String url, float size) {
    if (!Strings.isNullOrEmpty(url)) {
        Picasso.with(imageView.getContext()).load(url).resize((int) size, (int) size).centerCrop().into(imageView);
    }
}

有人知道問題出在哪里嗎?謝謝!

我想從圖庫中選擇圖片,然后保存路徑

那是行不通的。 當您使用ACTION_GET_CONTENT您具有使用返回的Uri 臨時權限

另請注意, ACTION_GET_CONTENTIntent中不使用Uri 擺脫android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI

有人知道問題出在哪里嗎?

您正在嘗試使用稍后返回的Uri 接收到Uri的實例組件(在本例中為活動)有權使用它,但您的應用程序中沒有其他操作。

在某些情況下,您可以將訪問權限傳播到其他組件實例。 例如,假設活動A具有問題代碼,然后在其中調用startActivity()啟動活動B。默認情況下,活動B將無權訪問Uri標識的內容。 但是,活動A可以將FLAG_GRANT_READ_URI_PERMISSION標志添加到它與startActivity()一起使用的Intent ,並傳遞對活動B的讀取訪問權限。

但是,其他形式的導航(例如BACK按鈕)不提供此功能,更不用說將Uri保留為字符串並在明天或下周嘗試使用它了。

如果您在Android 4.4+上切換到ACTION_OPEN_DOCUMENT ,則可以嘗試在ContentResolver上使用takePersistableUriPermission() ,在這種情況下,您可以永久訪問該內容。

否則,如果您正在尋找對內容的長期訪問,則需要將內容(例如,復制映像)復制到您控制的存儲器(例如, 內部存儲器 )中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM