1. 程式人生 > >記錄一個Android 6.0許可權問題的大坑

記錄一個Android 6.0許可權問題的大坑

在利用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規定的危險許可權有下面這些: