Android6.0權(quán)限管理

一孝情、6.0權(quán)限申請(qǐng)基礎(chǔ)知識(shí)

1. 場(chǎng)景描述

  1. 對(duì)于Adroid 6.0以下手機(jī)安裝程序時(shí):根據(jù)權(quán)限產(chǎn)生一個(gè)權(quán)限列表覆致,用戶只有在同意之后才能完成app的安裝,造成了我們想要使用某個(gè)app,就必須默默忍受一些不必要的權(quán)限(比如某個(gè)app都要訪問通訊錄片仿、短信等)
  2. 6.0之后:我們可以直接安裝劲蜻,當(dāng)app需要我們授予不恰當(dāng)?shù)臋?quán)限時(shí)陆淀,我們可以予以拒絕。當(dāng)然先嬉,你也可以在設(shè)置界面對(duì)每個(gè)app的權(quán)限進(jìn)行查看轧苫,以及對(duì)每個(gè)權(quán)限進(jìn)行授權(quán)或解除授權(quán)。

2. 權(quán)限分類

新的權(quán)限機(jī)制更好的保護(hù)了用戶隱私疫蔓,Google將權(quán)限分為:
1)Normal Permissions:這類權(quán)限一般不涉及用戶隱私含懊,是不需要用戶授權(quán)的,比如手機(jī)振動(dòng)鳄袍、訪問網(wǎng)絡(luò)等绢要;
2)Dangerous Permission:一般是涉及到用戶隱私,需要用戶進(jìn)行授權(quán)拗小,比如讀取sdcard重罪、訪問通訊錄等;
3)特殊權(quán)限

  • Normal Permissions:
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
  • Dangerous Permissions
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

危險(xiǎn)權(quán)限是一組一組的哀九,如果app是運(yùn)行在Android 6.x的機(jī)器上剿配,對(duì)于授權(quán)機(jī)制是這樣的:如果你申請(qǐng)某個(gè)危險(xiǎn)的權(quán)限,假設(shè)你的app早已被用戶授權(quán)了同一組的某個(gè)危險(xiǎn)權(quán)限阅束,那么系統(tǒng)會(huì)立即授權(quán)呼胚,而不需要用戶去點(diǎn)擊授權(quán)。
不過要注意的是息裸,不要對(duì)權(quán)限組過多的依賴蝇更,盡可能對(duì)每個(gè)危險(xiǎn)權(quán)限都進(jìn)行正常流程的申請(qǐng),因?yàn)樵诤笃诘陌姹局羞@個(gè)權(quán)限組可能會(huì)產(chǎn)生變化呼盆。

  • 特殊權(quán)限
SYSTEM_ALERT_WINDOW
WRITE_SETTINGS

特殊權(quán)限特別敏感年扩,因此大多數(shù)應(yīng)用不應(yīng)該使用它們。如果某應(yīng)用需要其中一種權(quán)限访圃,必須在清單中聲明該權(quán)限厨幻,并請(qǐng)求用戶授權(quán)。

二、申請(qǐng)危險(xiǎn)權(quán)限的API

以申請(qǐng)CAMERA相機(jī)權(quán)限為例說明

  1. 在AndroidManifest.xml中添加需要的權(quán)限


    相機(jī)權(quán)限.png
  2. 檢測(cè)是否有權(quán)限况脆、申請(qǐng)權(quán)限
    在Activity的生命周期的某個(gè)方法(onCreate或onStart,onResume)中檢查本應(yīng)用程序是否有權(quán)限饭宾,有則進(jìn)行初始化等操作;若無權(quán)限則申請(qǐng)權(quán)限格了。

if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            // 如果用戶未授權(quán)該權(quán)限則申請(qǐng)權(quán)限看铆,申請(qǐng)結(jié)果在onRequestPermissionsResult中回調(diào)
            ActivityCompat.requestPermissions(context,
                    new String[]{Manifest.permission.CAMERA},
                    001);
        } else {
            // 相關(guān)初始化操作
        }
  1. 處理權(quán)限申請(qǐng)結(jié)果
    對(duì)于權(quán)限的申請(qǐng)結(jié)果,首先驗(yàn)證requestCode定位到你的申請(qǐng)笆搓,然后驗(yàn)證gratResults對(duì)應(yīng)于申請(qǐng)的結(jié)果(若果你同時(shí)申請(qǐng)兩個(gè)權(quán)限性湿,那么grantResults的length就為2,分別記錄你的兩個(gè)權(quán)限的申請(qǐng)結(jié)果)满败。
    若用戶授予了權(quán)限:進(jìn)行相關(guān)初始化操作
/**
* @param grantResults:存儲(chǔ)權(quán)限申請(qǐng)結(jié)果
*/
 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 001: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.

                } else {

                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return;
            }
        }
    }

未授予:則用戶不能使用該功能頁(yè)面肤频,注銷Activity

三、權(quán)限申請(qǐng)工具類

1. 工具類

權(quán)限處理的邏輯并不復(fù)雜算墨,但需要編寫很多重復(fù)的代碼宵荒,所以目前也有很多庫(kù)對(duì)其用法進(jìn)行了封裝。
權(quán)限申請(qǐng)需要的參數(shù):(上下文净嘀,權(quán)限字符串?dāng)?shù)組报咳、int型申請(qǐng)碼)。故挖藏,我們只需要寫個(gè)方法接收這幾個(gè)參數(shù)即可暑刃,然后邏輯是統(tǒng)一的。

參考文獻(xiàn)

Android 6.0 運(yùn)行時(shí)權(quán)限處理
Android 6.0運(yùn)行時(shí)權(quán)限詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膜眠,一起剝皮案震驚了整個(gè)濱河市岩臣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宵膨,老刑警劉巖架谎,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辟躏,居然都是意外死亡谷扣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門捎琐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來会涎,“玉大人,你說我怎么就攤上這事瑞凑∧┩海” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵拨黔,是天一觀的道長(zhǎng)蛔溃。 經(jīng)常有香客問我,道長(zhǎng)篱蝇,這世上最難降的妖魔是什么贺待? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮零截,結(jié)果婚禮上麸塞,老公的妹妹穿的比我還像新娘。我一直安慰自己涧衙,他們只是感情好哪工,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弧哎,像睡著了一般雁比。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撤嫩,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天偎捎,我揣著相機(jī)與錄音,去河邊找鬼序攘。 笑死茴她,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的程奠。 我是一名探鬼主播丈牢,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瞄沙!你這毒婦竟也來了己沛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤帕识,失蹤者是張志新(化名)和其女友劉穎泛粹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肮疗,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晶姊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伪货。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片们衙。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碱呼,靈堂內(nèi)的尸體忽然破棺而出蒙挑,到底是詐尸還是另有隱情,我是刑警寧澤愚臀,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布忆蚀,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏馋袜。R本人自食惡果不足惜男旗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欣鳖。 院中可真熱鬧察皇,春花似錦、人聲如沸泽台。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怀酷。三九已至稻爬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜕依,已是汗流浹背因篇。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笔横,地道東北人竞滓。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吹缔,于是被迫代替她去往敵國(guó)和親商佑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容