react-native-permissions發起request授權,用戶授權或取消沒有回調解決

最近調試授權bug相關問題,使用這個組件react-native-permissions,發現發起request授權,用戶授權或取消沒有回調;各種調試都沒有辦法解決。看下面代碼

import { check, request, PERMISSIONS, RESULTS, openSettings } from 'react-native-permissions';

let result = await check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE)
			switch (result) {
				case RESULTS.UNAVAILABLE:
					//不支持該功能
					Alert.alert('', '您的設備不支持該功能', [{ text: '確定' }]);
					return;
				case RESULTS.DENIED:
					//該權限尚未被請求、被拒絕,但可請求
					let req = await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
					if (req == RESULTS.DENIED) {
						//Alert.alert('', '您已經拒絕授權', [{ text: '我知道了' }]);
						Toast.show('您已經拒絕授權', {
							duration: Toast.durations.SHORT,
							position: Toast.positions.CENTER,
							animation: false,//不顯示動畫
						});
						return;
					}
					break;
				case RESULTS.GRANTED:
					//授予權限
					break;
				case RESULTS.BLOCKED:
					//該權限被拒絕
					Alert.alert('提示', '您已經禁用APP讀寫手機儲存權限,圖片文件訪問受限', [
						{
							text: '關閉',
							onDismiss: () => { }
						},
						{
							text: '去設置開啓權限',
							onPress: () => {
								openSettings()
							}
						}
					]);
					return;
			}

發起request授權let req = await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);

這段代碼後面不執行,一直等待沒有結果,查了很久才解決。

解決辦法:

在Android工程Java代碼MainActivity.java裏複寫onRequestPermissionsResult

   @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){//
            case 0://如果申請權限回調的參數
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this,"申請成功",Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this,"拒絕權限",Toast.LENGTH_SHORT).show();
                }
                break;
          
        }
 
    }

原因:

首先6.0之前的權限 直接在 AndroidManifest 裏面申請就ok 

6.0以後 包括6.0 都需要申請動態權限,onRequestPermissionsResult是授權回調處理,沒有的話就一直阻塞,等待導致後面部分代碼沒有執行。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章