記錄一個Android 6.0許可權問題的大坑
阿新 • • 發佈:2019-02-15
在利用Camera這個類的時候,我是按照官方的API寫的,一開始就閃退報空指標!追根溯源,是camera沒有例項化,但是我明明已經Camera.open()了!!於是乎,重新核對了一下程式碼,沒發現問題!而且許可權也配了!尼瑪,難道官方文件錯了?這時,想起了萬能的百度,發現Android 6.0以後的有了一種執行時許可權,正好Camera也位列在內,臥槽!大概看了看意思,就是mainfest裡配的許可權在安裝app的時候不會生效,反而改成了在執行時,會彈出一個對話方塊讓使用者選擇是否啟用這個許可權!瞬間想起了前幾天剛把手機Android版本升級到6.0以上了!瞬間~心中一萬匹操尼瑪奔騰而過!崩掉的原因:程式在執行中直接請求camera.open()時,實際上並未獲得操作Camera的許可權。
所以,在開啟Camera的時候,加一下判斷:
public void open(View view){ //先判斷使用者之前是否已經授予過該許可權 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { startActivity(new Intent(this,CaptureActivity.class)); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 1: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 使用者授予許可權 startActivity(new Intent(this,CaptureActivity.class)); } else { // 使用者拒絕許可權 } return; } } }
執行的時候,就會先彈出是否開啟執行相關的許可權,點選確定開啟,然後就接著可以愉快的玩耍了~~
Android6.0規定的危險許可權有下面這些: