2

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" />
S.M_Emamian
  • 17,005
  • 37
  • 135
  • 254
  • check out this topic https://stackoverflow.com/questions/8854359/exception-open-failed-eacces-permission-denied-on-android – Taki Jan 15 '21 at 20:02

4 Answers4

3

I just added this line to application:

android:requestLegacyExternalStorage="true"

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

S.M_Emamian
  • 17,005
  • 37
  • 135
  • 254
1

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

0

Maybe you should add request for FileSystem permission

0

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" />
Alexiz Hernandez
  • 609
  • 2
  • 9
  • 31