首先安利一個(gè)大家都知道的事情,Google推出了中文版Android開發(fā)文檔。
說到權(quán)限變化大家馬上就想到Android API23(6.0)之后權(quán)限系統(tǒng)大改。當(dāng)build.gradle
中targetSdkVersion
設(shè)置小于23時(shí),會(huì)繼續(xù)引用舊版本權(quán)限管理機(jī)制,當(dāng)targetSdkVersion
大于等于23時(shí),則會(huì)使用新的權(quán)限管理。
targetSdkVersion < 23
當(dāng)targetSdkVersion
小于23時(shí),你的項(xiàng)目會(huì)繼續(xù)使用舊版本的權(quán)限機(jī)制:
- 用戶在安裝時(shí)獲取到所有權(quán)限,在使用權(quán)限時(shí)無需進(jìn)行預(yù)判斷。
- 雖然使用舊版的權(quán)限機(jī)制,但是在
設(shè)置-App詳情
中也可以找到權(quán)限管理將其關(guān)閉。如果用戶手動(dòng)來到設(shè)置將權(quán)限關(guān)閉,我們的項(xiàng)目在用到該權(quán)限時(shí)會(huì)發(fā)生Crash,所以如果使用低版本權(quán)限管理,請(qǐng)將需要用到權(quán)限的地方try-catch
起來。 - 那些低版本權(quán)限提示彈窗都是手機(jī)廠商自定義的。他們擁有系統(tǒng)權(quán)限,在檢測到你的App使用權(quán)限時(shí)會(huì)提示用戶權(quán)限授權(quán),如果用戶拒絕則替用戶到設(shè)置中心關(guān)閉權(quán)限。
- 綜上,不想使用最新的權(quán)限管理,則將
targetSdkVersion
設(shè)置為小于23即可,并且將用到權(quán)限的代碼try-catch
起來。這里需要知道不是所有的權(quán)限都可以關(guān)閉的,只有涉及用戶隱私的權(quán)限才會(huì)在設(shè)置中展示出來,方便用戶進(jìn)行手動(dòng)關(guān)閉。
targetSdkVersion >= 23
- 將權(quán)限分為了
普通權(quán)限
和隱私權(quán)限
,普通權(quán)限在清單文件中聲明則直接獲取。隱私權(quán)限也需要在清單文件中聲明,但是在安裝完成后,所有的隱私權(quán)限都為拒絕狀態(tài),需要在用到隱私權(quán)限時(shí)判斷權(quán)限是否開啟,否則項(xiàng)目直接發(fā)生Crash。 - 第一次使用隱私權(quán)限時(shí)直接彈出系統(tǒng)的權(quán)限授權(quán)彈窗,用戶授權(quán)則永久授權(quán),拒絕則無法使用此權(quán)限。第二次或者之后用到此權(quán)限我們需要做一個(gè)自己的彈窗來描述該權(quán)限的作用,然后關(guān)閉我們自己的彈窗后會(huì)彈出系統(tǒng)的權(quán)限授權(quán)彈窗,此時(shí)彈窗上會(huì)有不再提醒的提示文字,如果用戶勾選了不再提醒則再也不會(huì)提醒并且權(quán)限關(guān)閉。
- 檢測權(quán)限關(guān)閉并且勾選了不再提醒我們可以提示用戶到設(shè)置中心中手動(dòng)打開權(quán)限。用戶如果打開則永久授權(quán)(當(dāng)然還是可以再關(guān)閉的)。
- 權(quán)限組的概念也需要知道,比如獲取寫文件權(quán)限時(shí),用戶授權(quán)則會(huì)同時(shí)獲取讀文件的權(quán)限,因?yàn)樗麄儗儆谕粋€(gè)權(quán)限組。
- 綜上,新版本權(quán)限的適配也很簡單,主要工作是在所有用到隱私權(quán)限的地方添加權(quán)限是否授權(quán)的判斷、后續(xù)的一些判斷細(xì)節(jié)以及回調(diào)。Google寫的權(quán)限工具easypermissions是我在權(quán)限改版時(shí)用的,還是非常好用的。demo可參考官方demo。
有任何問題請(qǐng)聯(lián)系mengyuanzz@126.com