Разрешение доступа к файлам, даже если разрешение запрещено Android - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю над React Native. Я написал код для разрешения в MainActivity.java .

Когда я запускаю приложение, оно запрашивает разрешение / запрещение доступа к файлу. Даже если я нажму «Запретить», это позволит мне получить доступ к файлам из хранилища. В чем может быть проблема?

AndroidManifest.html

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

<uses-sdk
    android:minSdkVersion="16"
    android:targetSdkVersion="23" />

build.gradle

compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
    applicationId "com.test"
    minSdkVersion 16
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}

MainActivity.java

public class MainActivity extends ReactActivity {

private static final int REQUEST_CODE = 101;

/**
 * Returns the name of the main component registered from JavaScript.
 * This is used to schedule rendering of the component.
 */
@Override
protected String getMainComponentName() {
    return "Test";
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    SplashScreen.show(this);  // here
    super.onCreate(savedInstanceState);
    int permission = ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (permission != PackageManager.PERMISSION_GRANTED) {
        makeRequest();
    }
}
protected void makeRequest() {
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},
            REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_CODE: {

            if (grantResults.length == 0
                    || grantResults[0] !=
                    PackageManager.PERMISSION_GRANTED) {

            } else {
            }
            return;
        }
    }
  }
}

App.js

import { DocumentPicker, DocumentPickerUtil } from 'react-native-document-picker';

 pickerAttacment() {

        DocumentPicker.show({
            filetype: [DocumentPickerUtil.allFiles()],
          }, (error, res) => {
              this.props.uploadPhoto(res, (response) => {
                 alert("File Saved on Server!");
              });
          });
    }
}

    render() {
        return ( <Text onPress = {
                () => this.pickerAttacment()
            }
            style = {
                styles.textStyle
            } ></Text>

        )
    }

actions.js

    /*
       @Method : uploadPhoto
       @Params :
       @Returns : *
       */
    export function uploadPhoto(file, callback) {
        return (dispatch) => {
            RNFetchBlob.fetch('POST', url , {
                'Content-Type': 'multipart/form-data',
            }, [{
                name: 'File',
                filename: file.fileName,
                data: RNFetchBlob.wrap(file.uri)
            }, ]).then((res) => {
                callback(res);
            }).catch((err) => {
                callback('error');
            })
        }
    }

РЕШЕНО:

Я удалил код разрешения, который написал в MainActivity .

Я должен написать код разрешения при нажатии кнопки в React Native. Пожалуйста, смотрите ниже код:

    pickerAttacment() {
      PermissionsAndroid.requestMultiple(
        [
          PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
          PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
        ], {
          title: 'Permission',
          message: 'We need your permission.',
        },
      )
        .then((permRes) => {

        if (permRes['android.permission.READ_EXTERNAL_STORAGE'] === PermissionsAndroid.RESULTS.GRANTED &&
            permRes['android.permission.WRITE_EXTERNAL_STORAGE'] === PermissionsAndroid.RESULTS.GRANTED) {
          DocumentPicker.show({
            filetype: [DocumentPickerUtil.allFiles()],
          }, (error, res) => {
            this.props.uploadPhoto(res, (response) => {
              if (response != 'error') {
                alert('File has been uploaded successfully.')
              } else {
                alert('Error in file uploading.');
              }
            });
          })
        }
      })
    }
...