日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

安卓請求權限

作者:西湖就一池塘 更新時間: 2022-08-05 編程語言

1.首先確定你要申請的權限

可以定義成一個數組:如

protected String[] needPermissions = {
? ? ? ? ? ? Manifest.permission.WRITE_EXTERNAL_STORAGE,//存儲卡寫入權限
? ? ? ? ? ? Manifest.permission.READ_EXTERNAL_STORAGE,//存儲卡讀取權限
? ? ? ? ? ? Manifest.permission.READ_PHONE_STATE,//讀取手機狀態權限
? ? };

上訴權限是一個常量字符串,需要引入?import android.Manifest;

2.檢測權限有沒有獲取到,找出沒獲取到的去申請

private List<String> checkGamePer(){
? ? ? ? List<String> arr = new ArrayList<String>();
? ? ? ? for (String perm : needPermissions) {

? ? ? ? ? ? ? ? //this參數要activity
? ? ? ? ? ? if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED ) {
? ? ? ? ? ? ? ? arr.add(perm);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return arr;
? ? }

?List<String> arr = checkGamePer();
? ? ? ? if (arr.size()>0) {
? ? ? ? ? ? // 還有權限沒申請到,則申請權限,? this參數要activity
? ? ? ? ? ? ActivityCompat.requestPermissions(this, arr.toArray(new String[arr.size()]), 1);
? ? ? ? } else {
? ? ? ? ? ?//權限都申請到了,直接做你想做的事
? ? ? ? }

3.玩家點擊同意或者拒絕權限后會回調,在上訴this的activity中注冊回調函數

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == 1) {
            Boolean flag = true;
            for (int i = 0; i < permissions.length; i++) {
                if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {//選擇了“始終允許”
                    flag = false;
                }
            }
            if (flag) {
                //申請成功
                
            } else {
                //失敗  退出游戲
                finish();
            }
        }
    }

這里的requestCode就是請求權限時,傳入的參數?

寫法2

//請求權限
protected List<String> mNeedRequestPMSList = new ArrayList<>();

void checkAndRequestPermissions(int requestCode) {
        
        if(Build.VERSION.SDK_INT >= 23 &&
                PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(MainActivity.activity,Manifest.permission.READ_PHONE_STATE)){
            mNeedRequestPMSList.add(Manifest.permission.READ_PHONE_STATE);
        }
        checkAndRequestPermissionsEnd(Constants.REQUEST_PERMISSIONS_CODE_ViVo);
    }
/**檢測權限結束 */
    private void checkAndRequestPermissionsEnd(int requestCode){
        if (0 == mNeedRequestPMSList.size()) {
            /**
             * 權限都已經有了
             */
            permissionInit();
        } else {
            /**
             * 有權限需要申請,主動申請。
             */
            String[] temp = new String[mNeedRequestPMSList.size()];
            mNeedRequestPMSList.toArray(temp);
            ActivityCompat.requestPermissions(MainActivity.activity, temp, requestCode);
        }
    }
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        //是否用戶都點了允許
        Boolean flag = true;
        for (int i = 0; i < permissions.length; i++) {
            if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {//選擇了“始終允許”
                flag = false;
            }
        }
        switch (requestCode) {
            case Constants.REQUEST_PERMISSIONS_CODE_OPPO:
                if (flag) {
                    ChannelMain.getInstance().agreePermission();
                } else {
                    /**
                     * 如果用戶沒有授權,那么應該說明意圖,引導用戶去設置里面授權。
                     */
                    Toast.makeText(this, "應用缺少SDK運行必須的READ_PHONE_STATE權限!請點擊\"應用權限\",打開所需要的權限。", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.setData(Uri.parse("package:" + getPackageName()));
                    startActivity(intent);
                    finish();
                }
                break;
            default:
                break;
        }
    }

?

原文鏈接:https://blog.csdn.net/xzl159/article/details/126155938

欄目分類
最近更新