Android開發(fā)必知:6.0權(quán)限,官方分析

【威哥說】去年互订,Google升級6.0后吱肌,很重要的一點是權(quán)限的改變,到現(xiàn)在很多總結(jié)分析權(quán)限的文章仰禽,但是或者不太詳細(xì)氮墨,或者有疏漏,下面我來給大家來總結(jié)下6.0權(quán)限的問題吐葵。

1.這個新的運行時權(quán)限僅當(dāng)我們設(shè)置targetSdkVersion ?23(這意味著你已經(jīng)在23上測試通過了)才起作用规揪,當(dāng)然還要是M系統(tǒng)的手機。app在6.0之前的設(shè)備依然使用舊的權(quán)限系統(tǒng)温峭。

如果app的targetSdkVersion 低于 23猛铅,那將被認(rèn)為app沒有用23新權(quán)限測試過,那將被繼續(xù)使用舊有規(guī)則:用戶在安裝的時候不得不接受所有權(quán)限凤藏,安裝后app就有了那些權(quán)限咯奸忽!然后app像以前一樣奔跑堕伪!注意,此時用戶依然可以取消已經(jīng)同意的授權(quán)月杉!用戶取消授權(quán)時刃跛,android 6.0系統(tǒng)會警告,但這不妨礙用戶取消授權(quán)苛萎。

問題又來了,這時候你的app崩潰嗎检号?

善意的主把這事也告訴了android小組腌歉,當(dāng)我們在targetSdkVersion 低于23的app調(diào)用一個需要權(quán)限的函數(shù)時,這個權(quán)限如果被用戶取消授權(quán)了的話齐苛,不拋出異常翘盖。但是他將啥都不干,結(jié)果導(dǎo)致函數(shù)返回值是null或者0.

2.代碼沒有成功改為支持最新運行時權(quán)限的app,不要設(shè)置targetSdkVersion 23 發(fā)布凹蜂,否則你就有麻煩了馍驯。只有當(dāng)你測試過了,再改為targetSdkVersion 23 玛痊。

警告:現(xiàn)在你在android studio新建項目汰瘫,targetSdkVersion 會自動設(shè)置為 23。如果你還沒支持新運行時權(quán)限擂煞,我建議你首先把targetSdkVersion 降級到22

3.權(quán)限組:

同一組的任何一個權(quán)限被授權(quán)了混弥,其他權(quán)限也自動被授權(quán)。例如对省,一旦WRITE_CONTACTS被授權(quán)了蝗拿,app也有READ_CONTACTS和GET_ACCOUNTS了。

權(quán)限分組官方表格如下:

下面我們來看具體的使用方法:

1.請求要申請的權(quán)限

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){

ActivityCompat.requestPermissions(this,

new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.WRITE_EXTERNAL_STORAGE,

Manifest.permission.READ_PHONE_STATE},2);

}else {

startActivity(new Intent(this,MainActivity.class));

finish();

}

2.請求后的回調(diào)方法蒿涎,根據(jù)返回的結(jié)果碼執(zhí)行操作

//動態(tài)權(quán)限申請后系統(tǒng)的回調(diào)方法

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

switch (requestCode){

case MY_PERMISSIONS_REQUEST:

for (int i = 0; i < grantResults.length; i++) {

//檢查權(quán)限是否被拒絕

if (grantResults[i] == PackageManager.PERMISSION_DENIED) {

Toast.makeText(SplashActivity.this, "本應(yīng)用需要申請讀寫sdcard權(quán)限來訪問本地文件", Toast.LENGTH_SHORT).show();

return;

}

}

break;

}

Intent intent = new Intent(SplashActivity.this,MainActivity.class);

startActivity(intent);

finish();

}

3.要注意這個方法哀托,用戶允許或拒絕返回值的類型

/**

* 用戶第一次拒絕后,下一次劳秋,返回true仓手,應(yīng)該提示用戶為什么需要這個權(quán)限,添加說明

* 用戶第二次請求權(quán)限時俗批,用戶拒絕了俗或,并選擇了不再提醒,返回false

* 設(shè)備的策略禁止當(dāng)前應(yīng)用獲取這個權(quán)限的授權(quán)岁忘,返回false

*

* 注意:第二次請求權(quán)限時候才有選項“不再提醒”辛慰,如果用戶一直拒絕,但沒有選擇不再提醒干像,下次請求權(quán)限時候帅腌,

* 會繼續(xù)有不再提醒的權(quán)限

*/

@Override

public boolean shouldShowRequestPermissionRationale(String permission) {

return super.shouldShowRequestPermissionRationale(permission);

}

以上就是Google官方的權(quán)限申請方法驰弄,這里總結(jié)下實際使用時候需要的注意點:

1.只請求你需要的權(quán)限:減少請求的次數(shù),或用intent來代替速客,讓其他的應(yīng)用來處理戚篙。

防止一次請求太多的權(quán)限或請求次數(shù)太多,用戶可能對你的應(yīng)用感到厭煩溺职。

2.在應(yīng)用啟動的時候岔擂,最好先請求應(yīng)用必須的一些權(quán)限,不是必須的浪耘,在使用的時候乱灵,才請求(如一些附帶權(quán)限),需要自己整理七冲,管理一下自己應(yīng)用的權(quán)限分類:

2.1 普通權(quán)限(normal permissions):只需要在androidmanifest.xml中聲明相應(yīng)的權(quán)限痛倚,在安裝應(yīng)用時,會默認(rèn)獲得許可澜躺。并且用戶不能修改權(quán)限許可蝉稳。(只需要在AndroidManifest.xml中簡單聲明這些權(quán)限就好,安裝時就授權(quán)掘鄙。不需要每次使用 時都檢查權(quán)限耘戚,而且用戶不能取消以上授權(quán)。)

2.2 需要申請的權(quán)限(dangerous permissions):

2.2.1 必要權(quán)限:最好在應(yīng)用啟動的時候通铲,進(jìn)行請求許可的一些權(quán)限(主要是應(yīng)用中主要功能需要的權(quán)限)

2.2.2 附帶權(quán)限:不是應(yīng)用主要功能需要的權(quán)限(如:分享圖片時毕莱,需要讀取應(yīng)用的通訊錄等等)

3.解釋你的應(yīng)用為什么需要這些權(quán)限:在請求之前requestPermissions().,提示用戶颅夺,讓用戶不會感到困惑

問題持續(xù)收集與回答

小伙伴們嗨起來

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朋截,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吧黄,更是在濱河造成了極大的恐慌部服,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拗慨,死亡現(xiàn)場離奇詭異廓八,居然都是意外死亡,警方通過查閱死者的電腦和手機赵抢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門剧蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烦却,你說我怎么就攤上這事宠叼。” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵冒冬,是天一觀的道長伸蚯。 經(jīng)常有香客問我,道長简烤,這世上最難降的妖魔是什么剂邮? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮横侦,結(jié)果婚禮上挥萌,老公的妹妹穿的比我還像新娘。我一直安慰自己丈咐,他們只是感情好瑞眼,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棵逊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪银酗。 梳的紋絲不亂的頭發(fā)上辆影,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音黍特,去河邊找鬼蛙讥。 笑死,一個胖子當(dāng)著我的面吹牛灭衷,可吹牛的內(nèi)容都是我干的次慢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翔曲,長吁一口氣:“原來是場噩夢啊……” “哼迫像!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞳遍,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤闻妓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掠械,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體由缆,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年猾蒂,在試婚紗的時候發(fā)現(xiàn)自己被綠了均唉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肚菠,死狀恐怖舔箭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情案糙,我是刑警寧澤限嫌,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布靴庆,位于F島的核電站,受9級特大地震影響怒医,放射性物質(zhì)發(fā)生泄漏炉抒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一稚叹、第九天 我趴在偏房一處隱蔽的房頂上張望焰薄。 院中可真熱鬧,春花似錦扒袖、人聲如沸塞茅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽野瘦。三九已至,卻和暖如春飒泻,著一層夾襖步出監(jiān)牢的瞬間鞭光,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工泞遗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惰许,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓史辙,卻偏偏與公主長得像汹买,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子聊倔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

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