android 權限判斷

1.SplashActivity

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if (Build.VERSION.SDK_INT >= 23) {//6.0才用動態權限

initPermission();

}

 

}

--------------------------------------------------------------------

//申請兩個權限,錄音和文件讀寫

//1、首先聲明一個數組permissions,將需要的權限都放在裏面

String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,

Manifest.permission.READ_EXTERNAL_STORAGE};

//2、創建一個mPermissionList,逐個判斷哪些權限未授予,未授予的權限存儲到mPerrrmissionList中

List<String> mPermissionList = new ArrayList<>();

 

private final int mRequestCode = 100;//權限請求碼

 

 

//權限判斷和申請

private void initPermission() {

mPermissionList.clear();//清空沒有通過的權限

//逐個判斷你要的權限是否已經通過

for (int i = 0; i < permissions.length; i++) {

if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {

mPermissionList.add(permissions[i]);//添加還未授予的權限

}

}

//申請權限

if (mPermissionList.size() > 0) {//有權限沒有通過,需要申請

ActivityCompat.requestPermissions(this, permissions, mRequestCode);

}else{

//說明權限都已經通過

}

}

//請求權限後回調的方法

//參數: requestCode 是我們自己定義的權限請求碼

//參數: permissions 是我們請求的權限名稱數組

//參數: grantResults 是我們在彈出頁面後是否允許權限的標識數組,數組的長度對應的是權限名稱數組的長度,數組的數據0表示允許權限,-1表示我們點擊了禁止權限

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,

@NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

boolean hasPermissionDismiss = false;//有權限沒有通過

if (mRequestCode == requestCode) {

for (int i = 0; i < grantResults.length; i++) {

if (grantResults[i] == -1) {

hasPermissionDismiss = true;

}

}

//如果有權限沒有被允許

if (hasPermissionDismiss) {

showPermissionDialog();//跳轉到系統設置權限頁面,或者直接關閉頁面,不讓他繼續訪問

}else{

//全部權限通過,進行下一步操作

 

}

}

 

}

 

--------------------------------------------------------------------

private void showPermissionDialog(){

AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this);

builder.setTitle("權限設置");

builder.setMessage("是否開啓權限?");

builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

goIntentSetting();

finish();

}

});

builder.setNeutralButton("取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

finish();

}

});

builder.show();

}

--------------------------------------------------------------------

private void goIntentSetting() {

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", SplashActivity.this.getPackageName(), null);

intent.setData(uri);

try {

SplashActivity.this.startActivity(intent);

} catch (Exception e) {

e.printStackTrace();

}

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章