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

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

安卓請(qǐng)求權(quán)限

作者:西湖就一池塘 更新時(shí)間: 2022-08-05 編程語(yǔ)言

1.首先確定你要申請(qǐng)的權(quán)限

可以定義成一個(gè)數(shù)組:如

protected String[] needPermissions = {
? ? ? ? ? ? Manifest.permission.WRITE_EXTERNAL_STORAGE,//存儲(chǔ)卡寫入權(quán)限
? ? ? ? ? ? Manifest.permission.READ_EXTERNAL_STORAGE,//存儲(chǔ)卡讀取權(quán)限
? ? ? ? ? ? Manifest.permission.READ_PHONE_STATE,//讀取手機(jī)狀態(tài)權(quán)限
? ? };

上訴權(quán)限是一個(gè)常量字符串,需要引入?import android.Manifest;

2.檢測(cè)權(quán)限有沒(méi)有獲取到,找出沒(méi)獲取到的去申請(qǐng)

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

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

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

3.玩家點(diǎn)擊同意或者拒絕權(quán)限后會(huì)回調(diào),在上訴this的activity中注冊(cè)回調(diào)函數(shù)

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) {
                //申請(qǐng)成功
                
            } else {
                //失敗  退出游戲
                finish();
            }
        }
    }

這里的requestCode就是請(qǐng)求權(quán)限時(shí),傳入的參數(shù)?

寫法2

//請(qǐng)求權(quán)限
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);
    }
/**檢測(cè)權(quán)限結(jié)束 */
    private void checkAndRequestPermissionsEnd(int requestCode){
        if (0 == mNeedRequestPMSList.size()) {
            /**
             * 權(quán)限都已經(jīng)有了
             */
            permissionInit();
        } else {
            /**
             * 有權(quán)限需要申請(qǐng),主動(dòng)申請(qǐng)。
             */
            String[] temp = new String[mNeedRequestPMSList.size()];
            mNeedRequestPMSList.toArray(temp);
            ActivityCompat.requestPermissions(MainActivity.activity, temp, requestCode);
        }
    }
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        //是否用戶都點(diǎn)了允許
        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 {
                    /**
                     * 如果用戶沒(méi)有授權(quán),那么應(yīng)該說(shuō)明意圖,引導(dǎo)用戶去設(shè)置里面授權(quán)。
                     */
                    Toast.makeText(this, "應(yīng)用缺少SDK運(yùn)行必須的READ_PHONE_STATE權(quán)限!請(qǐng)點(diǎn)擊\"應(yīng)用權(quán)限\",打開(kāi)所需要的權(quán)限。", 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

欄目分類
最近更新