自己在開發過程中遇到了兩個權限方面的巨坑,第一個是攝像頭權限的調取第二個是存儲權限;第一個倒還好,提示信息比較明確,第二個存儲權限的Error提示巨坑,提示找不到相應路徑,剛開始還以爲自己路徑拿錯了,一直修改自己獲取圖片路徑的方式.....
Android6.0從版本開始有一個很噁心人的改動,那就是動態權限,稍不注意就會掉到坑裏去。
在Android6.0以前,只需要在清單配置文件添加相應權限就可以調用了,但是如果是在Android6.0設備上,需要去動態添加相應權限。
進行版本號判斷
// 版本判斷。當手機系統大於 23 時,纔有必要去判斷權限是否獲取 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 檢查該權限是否已經獲取 int i = ContextCompat.checkSelfPermission(this, permissions[0]); // 權限是否已經 授權 GRANTED---授權 DINIED---拒絕 if (i != PackageManager.PERMISSION_GRANTED) { // 如果沒有授予該權限,就去提示用戶請求 showDialogTipUserRequestPermission(); }
private void showDialogTipUserRequestPermission() { // 提示用戶該請求權限的彈出框 new AlertDialog.Builder(this) .setTitle("存儲權限不可用") .setMessage("本應用需要獲取存儲空間,爲你存儲個人信息;\n否則,您將無法正常使用") .setPositiveButton("立即開啓", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startRequestPermission(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }).setCancelable(false).show(); } // 開始提交請求權限 private void startRequestPermission() { ActivityCompat.requestPermissions(this, permissions, 321); }