1. 程式人生 > >Android6.0許可權快速申請(基於RxJava2更優雅)

Android6.0許可權快速申請(基於RxJava2更優雅)

一、前言

前言?哪來那麼多廢話,直接進入正題!

二、需要申請的許可權

咳咳咳,進入正題前,我們還是先了解一下哪些許可權是Android6.0後需要手動申請的吧,對症下藥,才是王道嘛!
這裡寫圖片描述

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 (資料讀寫的許可權)
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

是不是感受到無比的貼心,專門去翻譯成了中文,我們可以看到,需要申請的許可權都是按組(group)來劃分,同組下的許可權,只要申請其中一個,那麼其他許可權就不需要再手動申請了。還是舉個栗子吧,例如“資料讀寫的許可權”,我們手動申請了WRITE_EXTERNAL_STORAGE,那麼我們就不用再手動申請READ_EXTERNAL_STORAGE,好了,開始接下來的表演。
這裡寫圖片描述

三、新增依賴

在build.gradle中新增如下程式碼:

dependencies {
    ···
    compile 'com.tbruyelle.rxpermissions2:rxpermissions:[email protected]'
    compile "io.reactivex.rxjava2:rxjava:2.1.0"
}

四、使用

在需要申請許可權的Activity中呼叫如下程式碼初始化:

RxPermissions rxPermissions = new RxPermissions(this);

申請你需要獲取的許可權,老規矩,舉個栗子:

rxPermissions
                        //request中新增你要獲取的許可權名稱,這裡已讀寫許可權為例
                        .request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        .subscribe(new Consumer<Boolean>() {
                            @Override
                            public void accept(@NonNull Boolean aBoolean) throws Exception {
                                //根據Boolean來判斷申請成功後和申請失敗後的邏輯判斷
                                if (aBoolean) {
                                    Toast.makeText(MainActivity.this, "申請成功", Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(MainActivity.this, "取消申請", Toast.LENGTH_SHORT).show();
                                }
                            }
                        });

這樣就完成了許可權申請。當然,如果你要同時申請多個許可權,只需要在request中繼續新增許可權即可:

rxPermissions
                        //request中申請多個許可權
                        .request(Manifest.permission.WRITE_EXTERNAL_STORAGE, 
                                Manifest.permission.CALL_PHONE, 
                                Manifest.permission.CAMERA)
                        .subscribe(new Consumer<Boolean>() {
                            @Override
                            public void accept(@NonNull Boolean aBoolean) throws Exception {
                                //根據Boolean來判斷申請成功後和申請失敗後的邏輯判斷
                                if (aBoolean) {
                                    Toast.makeText(MainActivity.this, "申請成功", Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(MainActivity.this, "取消申請", Toast.LENGTH_SHORT).show();
                                }
                            }
                        });

Android6.0許可權申請就被我們如此簡單的完成啦,是不是炒雞方便!好了,教程就此結束,喜歡的朋友支援一下,謝謝啦~
這裡寫圖片描述