load image picasso open failed: EACCES (Permission denied)

和自甴很熟 提交于 2021-01-29 12:36:32

问题


I want to load an image but I got this error:

/storage/emulated/0/productss/Montearci_products/Bracelets/airplane/Brac - 020.jpg: open failed: EACCES (Permission denied)

The file is exist. My codes:

  Picasso.get().setLoggingEnabled(true);
  Picasso.get().load(muri).into(mimg);

my android version is 10.

my permissions:

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

回答1:


I just added this line to application:

android:requestLegacyExternalStorage="true"

I don't know but for android 10 it should be added !




回答2:


Maybe you should add request for FileSystem permission




回答3:


You might be missing the following permissions in your Manifest to be able to read from SD Card:

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



回答4:


First Option that you should take care of is Permision -

For API 23+ you need to request the read/write permissions even if they are already in your manifest file cause these are considered dangerous permissions

// Storage Permissions

private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

/**
 * Checks if the app has permission to write to device storage
 *
 * If the app does not has permission then the user will be prompted to grant permissions
 *
 *
 */
public static void verifyStoragePermissions(Activity activity) {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}

Second Option that you can try is :-

According to Picasso docs you have to do something like this: file:///android_asset/DvpvklR.png

So I used to have:

/storage/sdcard/Pictures/findyoursport/yoursport_1482358052384.jpeg

Prepending: file:// did the trick

Third - If you're running this on Android 10 or higher then use this->

<manifest ... >
  <application android:requestLegacyExternalStorage="true" ... >
    ...
  </application>
</manifest>

I hope it will work



来源:https://stackoverflow.com/questions/65742742/load-image-picasso-open-failed-eacces-permission-denied

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!