首先安利一個大家都知道的事情饭冬,Google推出了中文版Android開發(fā)文檔。
說到權(quán)限變化大家馬上就想到Android API23(6.0)之后權(quán)限系統(tǒng)大改峡迷。當build.gradle
中targetSdkVersion
設(shè)置小于23時银伟,會繼續(xù)引用舊版本權(quán)限管理機制,當targetSdkVersion
大于等于23時绘搞,則會使用新的權(quán)限管理彤避。
targetSdkVersion < 23
當targetSdkVersion
小于23時,你的項目會繼續(xù)使用舊版本的權(quán)限機制:
- 用戶在安裝時獲取到所有權(quán)限夯辖,在使用權(quán)限時無需進行預判斷琉预。
- 雖然使用舊版的權(quán)限機制,但是在
設(shè)置-App詳情
中也可以找到權(quán)限管理將其關(guān)閉蒿褂。如果用戶手動來到設(shè)置將權(quán)限關(guān)閉圆米,我們的項目在用到該權(quán)限時會發(fā)生Crash,所以如果使用低版本權(quán)限管理啄栓,請將需要用到權(quán)限的地方try-catch
起來娄帖。 - 那些低版本權(quán)限提示彈窗都是手機廠商自定義的。他們擁有系統(tǒng)權(quán)限昙楚,在檢測到你的App使用權(quán)限時會提示用戶權(quán)限授權(quán)近速,如果用戶拒絕則替用戶到設(shè)置中心關(guān)閉權(quán)限。
- 綜上,不想使用最新的權(quán)限管理削葱,則將
targetSdkVersion
設(shè)置為小于23即可奖亚,并且將用到權(quán)限的代碼try-catch
起來。這里需要知道不是所有的權(quán)限都可以關(guān)閉的析砸,只有涉及用戶隱私的權(quán)限才會在設(shè)置中展示出來昔字,方便用戶進行手動關(guān)閉。
targetSdkVersion >= 23
- 將權(quán)限分為了
普通權(quán)限
和隱私權(quán)限
首繁,普通權(quán)限在清單文件中聲明則直接獲取作郭。隱私權(quán)限也需要在清單文件中聲明,但是在安裝完成后弦疮,所有的隱私權(quán)限都為拒絕狀態(tài)所坯,需要在用到隱私權(quán)限時判斷權(quán)限是否開啟,否則項目直接發(fā)生Crash挂捅。 - 第一次使用隱私權(quán)限時直接彈出系統(tǒng)的權(quán)限授權(quán)彈窗芹助,用戶授權(quán)則永久授權(quán),拒絕則無法使用此權(quán)限闲先。第二次或者之后用到此權(quán)限我們需要做一個自己的彈窗來描述該權(quán)限的作用状土,然后關(guān)閉我們自己的彈窗后會彈出系統(tǒng)的權(quán)限授權(quán)彈窗,此時彈窗上會有不再提醒的提示文字伺糠,如果用戶勾選了不再提醒則再也不會提醒并且權(quán)限關(guān)閉蒙谓。
- 檢測權(quán)限關(guān)閉并且勾選了不再提醒我們可以提示用戶到設(shè)置中心中手動打開權(quán)限。用戶如果打開則永久授權(quán)(當然還是可以再關(guān)閉的)训桶。
- 權(quán)限組的概念也需要知道累驮,比如獲取寫文件權(quán)限時,用戶授權(quán)則會同時獲取讀文件的權(quán)限舵揭,因為他們屬于同一個權(quán)限組谤专。
- 綜上,新版本權(quán)限的適配也很簡單午绳,主要工作是在所有用到隱私權(quán)限的地方添加權(quán)限是否授權(quán)的判斷置侍、后續(xù)的一些判斷細節(jié)以及回調(diào)。Google寫的權(quán)限工具easypermissions是我在權(quán)限改版時用的拦焚,還是非常好用的蜡坊。demo可參考官方demo。
有任何問題請聯(lián)系mengyuanzz@126.com