Android6.0 動(dòng)態(tài)權(quán)限詳解及動(dòng)態(tài)申請(qǐng)權(quán)限

1、動(dòng)態(tài)權(quán)限獲取機(jī)制

  • Google在Android 6.0中引入了動(dòng)態(tài)權(quán)限獲取機(jī)制(Runtime Permission),使得Android的權(quán)限管理更加嚴(yán)格完善箩退。
  • 動(dòng)態(tài)權(quán)限獲取要求開發(fā)者在調(diào)用涉及相關(guān)權(quán)限的代碼時(shí)丑罪,使用系統(tǒng)接口來動(dòng)態(tài)得申請(qǐng)相應(yīng)權(quán)限。定位SDK涉及權(quán)限即在此范疇中杰扫。
  • 在未獲取到定位權(quán)限情況下队寇,定位SDK獲取到的定位依據(jù)(基站、WiFi)均為空值章姓,因此無法有效定位佳遣,定位服務(wù)會(huì)返回錯(cuò)誤碼167识埋。

2、動(dòng)態(tài)權(quán)限機(jī)制的開啟

動(dòng)態(tài)權(quán)限機(jī)制的開啟

因此需要在項(xiàng)目配置文件中修改您的targetSdkVersion配置零渐。
對(duì)于Eclipse環(huán)境窒舟,請(qǐng)更改AndroidManifest.xml中代碼;AndroidStudio環(huán)境诵盼,請(qǐng)更改build.gradle中的代碼惠豺。

3、關(guān)于android:protectionLevel:權(quán)限的等級(jí)

  • normal 低風(fēng)險(xiǎn)權(quán)限风宁,只要申請(qǐng)了就可以使用(在AndroidManifest.xml中添加<uses-permission>標(biāo)簽)洁墙,安裝時(shí)不需要用戶確認(rèn);

  • dangerous 高風(fēng)險(xiǎn)權(quán)限戒财,安裝時(shí)需要用戶的確認(rèn)才可使用热监;

  • signature 只有當(dāng)申請(qǐng)權(quán)限的應(yīng)用程序的數(shù)字簽名與聲明此權(quán)限的應(yīng)用程序的數(shù)字簽名相同時(shí)(如果是申請(qǐng)系統(tǒng)權(quán)限,則需要與系統(tǒng)簽名相同)饮寞,才能將權(quán)限授給它狼纬;

  • signatureOrSystem 簽名相同,或者申請(qǐng)權(quán)限的應(yīng)用為系統(tǒng)應(yīng)用(在system image中)骂际,與signature類似疗琉,只是增加了rom中自帶的app的聲明 ,盡量不要使用該選項(xiàng)歉铝,因?yàn)閟ignature已經(jīng)適合絕大部分的情況盈简。

對(duì)于普通和危險(xiǎn)級(jí)別的權(quán)限,我們稱之為低級(jí)權(quán)限太示,應(yīng)用申請(qǐng)即授予柠贤。其他兩級(jí)權(quán)限,我們稱之為高級(jí)權(quán)限或系統(tǒng)權(quán)限类缤。當(dāng)應(yīng)用試圖在沒有權(quán)限的情況下做受限操作臼勉,應(yīng)用將被系統(tǒng)殺掉以警示。系統(tǒng)應(yīng)用可以使用任何權(quán)限餐弱。權(quán)限的聲明者可無條件使用該權(quán)限宴霸。

4、動(dòng)態(tài)權(quán)限代碼樣例

在Android 6.0系統(tǒng)中膏蚓,需要?jiǎng)討B(tài)獲取的權(quán)限涉及到:

    1. 獲取手機(jī)狀態(tài):
Manifest.permission.READ_PHONE_STATE;
    1. 獲取位置信息:
Manifest.permission.ACCESS_COARSE_LOCATION;
Manifest.permission.ACCESS_FINE_LOCATION;
    1. 讀寫SD卡:
Manifest.permission.READ_EXTERNAL_STORAGE;
Manifest.permission.WRITE_EXTERNAL_STORAGE;

5瓢谢、獲取權(quán)限使用API

  • 第一步,利用Context.checkSelfPermission接口驮瞧,觸發(fā)系統(tǒng)彈窗
    • int android.content.Context.checkSelfPermission(String permission)氓扛,此接口會(huì)觸發(fā)系統(tǒng)彈窗,用戶選擇后觸發(fā)Activity中的回調(diào)函數(shù)论笔,以READ_PHONE_STATE為例:
private static final int BAIDU_READ_PHONE_STATE =100;
  • 第二步采郎,定義權(quán)限獲取碼千所,申請(qǐng)權(quán)限
    • 自定義一個(gè)權(quán)限獲取碼,用于回調(diào)函數(shù)中做對(duì)應(yīng)處理蒜埋,調(diào)用checkSelfPermission接口申請(qǐng)權(quán)限:
if(mContext.checkSelfPermission(Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED) {
   // 申請(qǐng)一個(gè)(或多個(gè))權(quán)限淫痰,并提供用于回調(diào)返回的獲取碼(用戶定義)
   requestPermissions( new String[]{ Manifest.permission.READ_PHONE_STATE },BAIDU_READ_PHONE_STATE );
}
  • 第三步,處理回調(diào)函數(shù)
    • 在Activity的onRequestPermissionResult回調(diào)函數(shù)中做處理:
public void onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions,grantResults);
    switch(requestCode) {
        //requestCode即所聲明的權(quán)限獲取碼理茎,在checkSelfPermission時(shí)傳入
        case 1:
            BAIDU_READ_PHONE_STATE:
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //獲取到權(quán)限黑界,做相應(yīng)處理
                //調(diào)用定位SDK應(yīng)確保相關(guān)權(quán)限均被授權(quán),否則會(huì)引起定位失敗
            } else{
                //沒有獲取到權(quán)限皂林,做特殊處理
            }
            break;
        default:
            break;
    }
}

6朗鸠、一個(gè)權(quán)限獲取方式

一個(gè)權(quán)限獲取方式

7、多個(gè)權(quán)限獲取方式

多個(gè)權(quán)限獲取方式

8础倍、一個(gè)和多個(gè)權(quán)限獲取唯一不同的地方需要在回調(diào)中分別處理

回調(diào)中分別處理

9烛占、動(dòng)態(tài)權(quán)限獲取的封裝

  • 把權(quán)限的申請(qǐng)放在BaseActivity中,然后各個(gè)子Activity去繼承BaseActivity沟启。
  • 定義權(quán)限回調(diào)接口
  • 申請(qǐng)權(quán)限的方法必須傳遞一個(gè)Activity對(duì)象忆家,工具類中需要一個(gè)Activity管理器獲取最上層的Activity.
定義權(quán)限回調(diào)接口
Activity管理器獲取最上層的Activity
接口處理返回信息

Demo地址如下:
AndroidPermission Demo 地址鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市德迹,隨后出現(xiàn)的幾起案子芽卿,更是在濱河造成了極大的恐慌,老刑警劉巖胳搞,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卸例,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肌毅,警方通過查閱死者的電腦和手機(jī)筷转,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悬而,“玉大人呜舒,你說我怎么就攤上這事”康欤” “怎么了袭蝗?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)艰躺。 經(jīng)常有香客問我呻袭,道長(zhǎng),這世上最難降的妖魔是什么腺兴? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮廉侧,結(jié)果婚禮上页响,老公的妹妹穿的比我還像新娘篓足。我一直安慰自己,他們只是感情好闰蚕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布栈拖。 她就那樣靜靜地躺著,像睡著了一般没陡。 火紅的嫁衣襯著肌膚如雪涩哟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天盼玄,我揣著相機(jī)與錄音贴彼,去河邊找鬼。 笑死埃儿,一個(gè)胖子當(dāng)著我的面吹牛器仗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播童番,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼精钮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了剃斧?” 一聲冷哼從身側(cè)響起轨香,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幼东,沒想到半個(gè)月后臂容,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筋粗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年策橘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娜亿。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丽已,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出买决,到底是詐尸還是另有隱情沛婴,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布督赤,位于F島的核電站嘁灯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏躲舌。R本人自食惡果不足惜丑婿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羹奉,春花似錦秒旋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耕挨,卻和暖如春细卧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筒占。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工贪庙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赋铝。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓插勤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親革骨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子农尖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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