ReactNative 关于动态申请权限 PermissionAndoid的使用 解决android 6.0以上 通讯录、 sd卡存储、 相机 权限闪退等问题

import DeviceInfo from 'react-native-device-info';
_requestGeoLocationPermission = async () => {

        try {
            const granted = await PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
                {
                    'title': `${DeviceInfo.getApplicationName()}需要GPS定位权限`,
                    'message': `是否允许${DeviceInfo.getApplicationName()}访问你的地理定位?`
                }
            );
            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                console.log('Contact permission allowed');
               this._saveDeviceInfo();
            } else {
                console.log("Contact permission denied");
                NativeModules.NaviModule.openSettings();
            }
        } catch (err) {
            console.warn(err);
        }
    };
    hasGeoLocationPermission = async () => {
        try {
            return await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION);
        } catch (err) {
            console.warn(err, 'PERMISSION CHECK');
        }
    };

    _checkGeoLocationPermissionAndOpen = () => {
        this.hasGeoLocationPermission().then((hasGeoLocationPermission) => {
            console.log('hasCameraPermission result is ' + hasGeoLocationPermission);
            if (hasGeoLocationPermission) {
                console.log('Opening OCR directly');
               this._saveDeviceInfo();
            } else {
                this._requestGeoLocationPermission();
            }
        });
    };

    _requestContactPermission = async () => {

        try {
            const granted = await PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
                {
                    'title': `${DeviceInfo.getApplicationName()}需要通讯录权限`,
                    'message': `是否允许${DeviceInfo.getApplicationName()}访问你的通讯录?`
                }
            );
            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                console.log('Contact permission allowed');
                this._getAndroidContactList()
            } else {
                console.log("Contact permission denied");
                NativeModules.NaviModule.openSettings();
            }
        } catch (err) {
            console.warn(err);
        }
    };
    hasContactPermission = async () => {
        try {
            return await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_CONTACTS);
        } catch (err) {
            console.warn(err, 'PERMISSION CHECK');
        }
    };

    _checkContactPermissionAndOpen = () => {
        this.hasContactPermission().then((hasContactPermission) => {
            console.log('hasCameraPermission result is ' + hasContactPermission);
            if (hasContactPermission) {
                console.log('Opening OCR directly');
                this._getAndroidContactList()
            } else {
                this._requestContactPermission();
            }
        });
    };
    _requestSMSPermission = async () => {

        try {
            const granted = await PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.READ_SMS,
                {
                    'title': `${DeviceInfo.getApplicationName()}需要短信权限`,
                    'message': `是否允许${DeviceInfo.getApplicationName()}访问你的短信?`
                }
            );
            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                console.log('SMS permission allowed');
                this._getAndroidSmsList();
            } else {
                console.log("SMS permission denied");
                NativeModules.NaviModule.openSettings();
            }
        } catch (err) {
            console.warn(err);
        }
    };
    hasSMSPermission = async () => {
        try {
            return await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_SMS);
        } catch (err) {
            console.warn(err, 'PERMISSION CHECK');
        }
    };

    _checkSMSPermissionAndOpen = () => {
        this.hasSMSPermission().then((hasSMSPermission) => {
            console.log('hasCameraPermission result is ' + hasSMSPermission);
            if (hasSMSPermission) {
                console.log('Opening OCR directly');
               this._getAndroidSmsList();
            } else {
                this._requestSMSPermission();
            }
        });
    };
 _requestCameraPermission = async (liveApiKey,secret,SaaSId, custuserid, productauthkey) => {

        try {
            const granted = await PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.CAMERA,
                {
                    'title': `${DeviceInfo.getApplicationName()}需要相机权限`,
                    'message': `是否允许${DeviceInfo.getApplicationName()}访问你的相机?`
                }
            );
            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                console.log('Camera permission allowed');
                this._toZQOcr(liveApiKey,secret,SaaSId, custuserid, productauthkey)
            } else {
                console.log("Camera permission denied");
                NativeModules.NaviModule.openSettings();
            }
        } catch (err) {
            console.warn(err);
        }
    };
    hasCameraPermission = async () => {
        try {
            return await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.CAMERA);
        } catch (err) {
            console.warn(err, 'PERMISSION CHECK');
        }
    };

    _checkCameraPermissionAndOpen = (liveApiKey,secret,SaaSId, custuserid, productauthkey) => {
        this.hasCameraPermission().then((hasCameraPermission) => {
            console.log('hasCameraPermission result is ' + hasCameraPermission);
            if (hasCameraPermission) {
                console.log('Opening OCR directly');
                this._toZQOcr(liveApiKey,secret,SaaSId, custuserid, productauthkey)
            } else {
                this._requestCameraPermission(liveApiKey,secret,SaaSId, custuserid, productauthkey);
            }
        });
    };
					 @ReactMethod
					    public void openSettings(){
					        Utils.init(getReactApplicationContext());
					        IntentUtils.gotoPermissionSetting();
					    }
implementation 'com.github.SenhLinsh:Utils-Everywhere:2.1.0'    ------------》Intentutils

猜你喜欢

转载自blog.csdn.net/qq_21937107/article/details/89515045
今日推荐