Android權限詢問的實例詳解

AndroidMaifest.xml中聲明權限

<!-- 聲明所有需要的權限(包括普通權限和危險權限) -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>

直接上代碼,放在想要攔截的地方即可 ,一般是程序啟動時即訪問

private static final int MY_PERMISSION_REQUEST_CODE = 10000;

//第 1 步: 檢查是否有相應的權限,
boolean isAllGranted = checkPermissionAllGranted(
    new String[] {
        //根據自己需求,進行添加相應的權限
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
    }
);
// 如果權限全都擁有, 則直接初始化日志文件
if (isAllGranted) {
    configureLog4J.configure();//有權限之後要做的事情
    return;
}

//第 2 步: 請求權限
// 一次請求多個權限, 如果其他有權限是已經授予的將會自動忽略掉
ActivityCompat.requestPermissions(
    this,
    new String[] {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
    },
    MY_PERMISSION_REQUEST_CODE
);

//檢查是否擁有指定的所有權限
private boolean checkPermissionAllGranted(String[] permissions) {
    for (String permission : permissions) {
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            // 隻要有一個權限沒有被授予, 則直接返回 false
            return false;
        }
    }
    return true;
}


//第 3 步: 申請權限結果返回處理
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == MY_PERMISSION_REQUEST_CODE) {
        boolean isAllGranted = true;

        // 判斷是否所有的權限都已經授予瞭
        for (int grant : grantResults) {
            if (grant != PackageManager.PERMISSION_GRANTED) {
                isAllGranted = false;
                break;
            }
        }

        if (isAllGranted) {
            // 如果所有的權限都授予瞭, 則初始化日志文件
            configureLog4J.configure();//有權限之後要做的事情

        } else {
            // 彈出對話框告訴用戶需要權限的原因, 並引導用戶去應用權限管理中手動打開權限按鈕
            openAppDetails();
        }
    }
}
//打開 APP 的詳情設置
private void openAppDetails() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("該程序需要訪問 “外部存儲器”,請到 “應用信息 -> 權限” 中授予!");
    builder.setPositiveButton("去手動授權", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent intent = new Intent();
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setData(Uri.parse("package:" + getPackageName()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
            startActivity(intent);
        }
    });
    builder.setNegativeButton("取消", null);
    builder.show();
}

到此這篇關於Android權限詢問的文章就介紹到這瞭,更多相關Android權限詢問內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: