? ? ? ? 本文章適合于進(jìn)行Android開發(fā)的工作人員或者愛好者。若有不正確的地方绪励,歡迎指正铐炫。
? ? ? ? 很多進(jìn)行Android應(yīng)用開發(fā)的人都有這樣子的疑惑,為什么應(yīng)用訪問聯(lián)系人或者獲取設(shè)備位置信息等都需要先動(dòng)態(tài)申請(qǐng)對(duì)應(yīng)的權(quán)限然后用戶點(diǎn)擊同意之后才能正常訪問习柠。其實(shí)匀谣,AndroidO之后(targetSDK大于等于23),Android系統(tǒng)引入了運(yùn)行時(shí)權(quán)限的概念资溃,應(yīng)用訪問某些特定功能需要先動(dòng)態(tài)申請(qǐng)運(yùn)行時(shí)權(quán)限并且取得用戶授權(quán)才能夠成功訪問武翎,否則系統(tǒng)將拋出異常,若應(yīng)用沒有捕獲異常溶锭,應(yīng)用將崩潰宝恶。
? ? ? ? 那么,Android上到底有哪些是運(yùn)行時(shí)權(quán)限趴捅?對(duì)此垫毙,這里推薦一個(gè)Android源碼查看網(wǎng)站:http://androidxref.com/,國(guó)內(nèi)也能正常訪問拱绑。http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/res/AndroidManifest.xml文件里面定義了Android9.0上所有原生的權(quán)限信息(是不是覺得AndroidManifest.xml非常熟悉综芥,是的,自己寫的應(yīng)用也可以在對(duì)應(yīng)的AdroidManifest.xml文件里面自定義權(quán)限)猎拨。舉個(gè)例子:查看讀聯(lián)系人信息的權(quán)限:
<!-- Allows an application to read the user's contacts data.
? ? ? ? <p>Protection level: dangerous
? ? -->
? ? <permission android:name="android.permission.READ_CONTACTS"
? ? ? ? android:permissionGroup="android.permission-group.CONTACTS"
? ? ? ? android:label="@string/permlab_readContacts"
? ? ? ? android:description="@string/permdesc_readContacts"
? ? ? ? android:protectionLevel="dangerous" />
? ? ? ? name表示權(quán)限的名稱膀藐。permissionGroup表示權(quán)限的組別,這里表示讀聯(lián)系人的權(quán)限屬于聯(lián)系人權(quán)限組红省。label表示權(quán)限的標(biāo)簽(我不知道翻譯為標(biāo)簽是否合適)额各,可以在string.xml里面添加對(duì)各種語言。description表示對(duì)權(quán)限描述类腮,可以用來描述權(quán)限的作用臊泰。Protection level表示權(quán)限級(jí)別,normal表示普通權(quán)限,即應(yīng)用在manifest里面聲明使用這個(gè)權(quán)限系統(tǒng)就默認(rèn)給應(yīng)用這個(gè)權(quán)限缸逃;dangerous表示危險(xiǎn)權(quán)限针饥,即需要應(yīng)用動(dòng)態(tài)申請(qǐng)?jiān)摍?quán)限并且用戶明確授權(quán)之后系統(tǒng)才能給與應(yīng)用授權(quán)。當(dāng)然需频,權(quán)限級(jí)別還有signature以及privileged級(jí)別等丁眼,后續(xù)會(huì)慢慢講到這些。
? ? ? ? 本章內(nèi)容就到這里昭殉,下一章我們將一個(gè)應(yīng)用動(dòng)態(tài)申請(qǐng)危險(xiǎn)權(quán)限的流程苞七,權(quán)限彈框到底是哪里彈出來,以及為什么用戶點(diǎn)擊同意之后系統(tǒng)會(huì)給應(yīng)用進(jìn)行權(quán)限挪丢。