Android6.0動態獲取攝像頭許可權(舉一反三)
阿新 • • 發佈:2019-01-02
6.0系統可以動態的獲取系統的許可權API>22
例如攝像頭
舉一反三寫一個動態獲取攝像頭的方法,其他的許可權也可以稍微修改使用。
在呼叫攝像頭的地方進行判斷,系統的版本
Build.VERSION.SDK_INT>22
如果系統6.0或以上,就判斷有沒有許可權:
ContextCompat.checkSelfPermission(MainActivity.this,
android.Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED
PackageManager有兩個屬性PERMISSION_GRANTED,PERMISSION_DENIED;
GRANTED是已經獲取到許可權,
DENIED是沒有獲取到許可權;
如果有許可權了想幹嘛幹嘛,如果沒有,就去獲取許可權:
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{android.Manifest.permission.CAMERA},CAMERA_OK);
然後獲取許可權就結束了,然後幹嘛呢?獲取許可權也有個回撥:onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
switch (requestCode){
case CAMERA_OK:
if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
//這裡已經獲取到了攝像頭的許可權,想幹嘛幹嘛了可以
}else {
//這裡是拒絕給APP攝像頭許可權,給個提示什麼的說明一下都可以。
Toast.makeText(MainActivity.this,"請手動開啟相機許可權",Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
貼一下獲取許可權的程式碼:
if (Build.VERSION.SDK_INT>22){
if (ContextCompat.checkSelfPermission(MainActivity.this,
android.Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){
//先判斷有沒有許可權 ,沒有就在這裡進行許可權的申請
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{android.Manifest.permission.CAMERA},CAMERA_OK);
}else {
//說明已經獲取到攝像頭許可權了 想幹嘛幹嘛
}
}else {
//這個說明系統版本在6.0之下,不需要動態獲取許可權。
}
舉一反三,可以把其他的動態申請許可權的替換來。別忘了清單檔案裡面註冊上許可權。