READ_EXTERNAL_STORAGE permission is in manifest but still doesn't work

Viewed 13169

In androidmanifest.xml I have:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="23" />

In build.gradle I have:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        multiDexEnabled true
        applicationId "test"
        minSdkVersion 16
        targetSdkVersion 23

If i try to call CameraRoll.getPhotos() to get library photos I get error:

Could not get photos: need READ_EXTERNAL_STORAGE permission
    at createErrorFromErrorData

I am trying to run app on real device with android 6 and 7 on it, and I am trying to make it work like in IOS - when call getPhotos() to see permission request dialog.
What is wrong here?

3 Answers

Uses react-native PermissionAndroid class. https://facebook.github.io/react-native/docs/permissionsandroid

import { PermissionsAndroid } from 'react-native'

async requestExternalStoreageRead() {
    try {
        const granted = await PermissionsAndroid.request(
                  PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
                  {
                       'title': 'Cool App ...',
                       'message': 'App needs access to external storage'
                   }
        );

        return granted == PermissionsAndroid.RESULTS.GRANTED
} 
catch (err) {
  //Handle this error
  return false;
}

}

getPhotos = async () => {
    //Before calling getPhotos, request permission
    if (await this.requestExternalStoreageRead()){
        CameraRoll.getPhotos({
            first: 1000,
            assetType: 'All'
        })
        .then((r) => {
             this.setState({ photos: r.edges, summary: `Number of photos found ${r.edges.length}` })
    })
    .catch((error) => {
        this.setState({errorMsg: error.message});
    })
  }

}

Related