Я работаю над 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.');
}
});
})
}
})
}