一直都有許可權申請的問題,沒有足夠的重視,最近總是受到困擾,算了不說了,看代碼吧。
1、先判斷sdk的版本號碼
if (Build.VERSION.SDK_INT >= 23) {
checkAndRequestPermission();//檢查許可權
} else {
// 如果是Android6.0以下的機器,預設在安裝時獲得了所有許可權,可以直接調用SDK
}
2、@TargetApi(Build.VERSION_CODES.M)
private void checkAndRequestPermission() {
List lackedPermission = new ArrayList();
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);}// 許可權都已經有了,那麼直接調用SDKif (lackedPermission.size() == 0) { //處理自己的事} else { // 請求所缺少的許可權,在onRequestPermissionsResult中再看是否獲得許可權,如果獲得許可權就可以調用SDK,否則不要調用SDK。 String[] requestPermissions = new String[lackedPermission.size()]; lackedPermission.toArray(requestPermissions); requestPermissions(requestPermissions, 1024);}
}
private boolean hasAllPermissionsGranted(int[] grantResults) {
for (int grantResult : grantResults) {
if (grantResult == PackageManager.PERMISSION_DENIED) {
return false;
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1024 && hasAllPermissionsGranted(grantResults)) {
fetchSplashAD(this, container, skipView, Constants.APPID, Constants.SplashPosID, this, 0);
} 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();
}
}