android 6.0 以上 動態申請多個許可權
不囉嗦 直接上程式碼
第一步
首先在onCreate下判斷SDK版本
if (Build.VERSION.SDK_INT >= 23) {
//如果targetSDKVersion >= 23,那麼必須要申請到所需要的許可權,再呼叫廣點通SDK,否則廣點通SDK不會工作 checkAndRequestPermission(); } else { // 如果是Android6.0以下的機器,預設在安裝時獲得了所有許可權 }
第二步
@TargetApi(Build.VERSION_CODES.M) private void checkAndRequestPermission() { List<String> lackedPermission = new ArrayList<String>(); if (!(checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED)) { lackedPermission.add(Manifest.permission.READ_PHONE_STATE); }
if(!(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) =PackageManager.PERMISSION_GRANTED)) { lackedPermission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); }
if (!(checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)) { lackedPermission.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (!(checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)) { lackedPermission.add(Manifest.permission.CAMERA); } // 許可權都已經有了,那麼直接呼叫SDK if (lackedPermission.size() == 0) {
//操作你授權後的邏輯
} else { // 請求所缺少的許可權,在onRequestPermissionsResult中再看是否獲得許可權,如果獲得許可權就可以呼叫SDK,否則不要呼叫SDK。 String[] requestPermissions = new String[lackedPermission.size()]; lackedPermission.toArray(requestPermissions); requestPermissions(requestPermissions, 1024); } }
第三步 查看回調結果
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1024 && hasAllPermissionsGranted(grantResults)) { //在此操作你接下授權後的邏輯 } else { // 如果使用者沒有授權,那麼應該說明意圖,引導使用者去設定裡面授權。 Toast.makeText(this, "應用缺少必要的許可權!請點選\"許可權\",開啟所需要的許可權。", Toast.LENGTH_LONG).show(); Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); finish(); } }
結束;就是這麼簡單