1. 程式人生 > >【android 6.0 動態申請許可權的基本方法和框架使用】

【android 6.0 動態申請許可權的基本方法和框架使用】

基本的使用:

先提供一下goog官方的學習文件:

 int selfPermission = ContextCompat.checkSelfPermission(Main2Activity.this, Manifest.permission.CALL_PHONE);
        if (selfPermission != PackageManager.PERMISSION_GRANTED) {

            /**
             * 判斷該許可權請求是否已經被 Denied(拒絕)過。  返回:true 說明被拒絕過 ; false 說明沒有拒絕過
             *
             * 注意:
             * 如果使用者在過去拒絕了許可權請求,並在許可權請求系統對話方塊中選擇了 Don't ask again 選項,此方法將返回 false。
             * 如果裝置規範禁止應用具有該許可權,此方法也會返回 false。
             */
if (ActivityCompat.shouldShowRequestPermissionRationale(Main2Activity.this, Manifest.permission.CALL_PHONE)) { Log.i(TAG, "onViewClicked: 該許可權請求已經被 Denied(拒絕)過。"); //彈出對話方塊,告訴使用者申請此許可權的理由,然後再次請求該許可權。 //ActivityCompat.requestPermissions(Main2Activity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else { Log.i(TAG, "onViewClicked: 該許可權請未被denied過"); ActivityCompat.requestPermissions(Main2Activity.this, new String[]{Manifest.permission.CALL_PHONE}, 1); } } else { openAlbum();//開啟相簿 }

發起請求的回撥:

 @Override
    public
void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); Log.i(TAG, "onRequestPermissionsResult: requestCode=" + requestCode); switch (requestCode) { case 1: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { openAlbum(); } else { Toast.makeText(this, "you denied the permission", Toast.LENGTH_SHORT).show(); Log.i(TAG, "onRequestPermissionsResult: you denied the permission"); } break; default: break; } }

一些框架的封裝:

HiPermission 的簡單使用:更多檢視參考部落格相關文章。

該方法 申請幾乎必要的三個許可權。照相,定位,sd卡寫

 //CAMERA, ACCESS_FINE_LOCATION and WRITE_EXTERNAL_STORAGE
        HiPermission.create(this)
                .animStyle(R.style.PermissionAnimModal)
                //.style(R.style.PermissionDefaultGreenStyle)
                .checkMutiPermission(new PermissionCallback() {
                    @Override
                    public void onClose() {
                        Log.i(TAG, "onClose They cancelled our request"); //使用者關閉許可權申請
                    }

                    @Override
                    public void onFinish() {
                        Log.i(TAG, "onFinish: All permissions requested completed");  //所有許可權申請完成
                    }

                    @Override
                    public void onDeny(String permission, int position) {
                        Log.i(TAG, "onDeny");//在否認
                    }

                    @Override
                    public void onGuarantee(String permission, int position) {
                        Log.i(TAG, "onGuarantee");//使用者允許後,會回撥該函式  //在此可以做 事件處理啦,因為使用者已經同意了,此時已經拿到所需許可權啦。
                    }
                });

自6.0以後,都有哪些許可權需要動態獲取呢?在此羅列一下:
共分為9組,每組只要有一個許可權申請成功了,就預設整組許可權都可以使用了。

group:android.permission-group.CONTACTS
    permission:android.permission.WRITE_CONTACTS
    permission:android.permission.GET_ACCOUNTS    
    permission:android.permission.READ_CONTACTS

  group:android.permission-group.PHONE
    permission:android.permission.READ_CALL_LOG
    permission:android.permission.READ_PHONE_STATE 
    permission:android.permission.CALL_PHONE (打電話)
    permission:android.permission.WRITE_CALL_LOG
    permission:android.permission.USE_SIP
    permission:android.permission.PROCESS_OUTGOING_CALLS
    permission:com.android.voicemail.permission.ADD_VOICEMAIL

  group:android.permission-group.CALENDAR
    permission:android.permission.READ_CALENDAR
    permission:android.permission.WRITE_CALENDAR

  group:android.permission-group.CAMERA 
    permission:android.permission.CAMERA ( 相機 )

  group:android.permission-group.SENSORS
    permission:android.permission.BODY_SENSORS

  group:android.permission-group.LOCATION (位置相關)
    permission:android.permission.ACCESS_FINE_LOCATION
    permission:android.permission.ACCESS_COARSE_LOCATION

  group:android.permission-group.STORAGE ( SD卡讀寫許可權 )
    permission:android.permission.READ_EXTERNAL_STORAGE
    permission:android.permission.WRITE_EXTERNAL_STORAGE

  group:android.permission-group.MICROPHONE
    permission:android.permission.RECORD_AUDIO

  group:android.permission-group.SMS (簡訊相關)
    permission:android.permission.READ_SMS  (讀取簡訊)
    permission:android.permission.RECEIVE_WAP_PUSH
    permission:android.permission.RECEIVE_MMS
    permission:android.permission.RECEIVE_SMS (接受簡訊)
    permission:android.permission.SEND_SMS  (傳送簡訊)
    permission:android.permission.READ_CELL_BROADCASTS

參考部落格:

一行程式碼搞定漂亮的Android6.0許可權申請介面
HiPermission