以下內(nèi)容均摘自官網(wǎng)荔茬,此處僅作重點(diǎn)整理
在所有版本的 Android 中,您的應(yīng)用都需要在其應(yīng)用清單中同時(shí)聲明它需要的正常權(quán)限和危險(xiǎn)權(quán)限慕蔚。
- 如果設(shè)備運(yùn)行的是 Android 5.1 或更低版本孔飒,或者應(yīng)用的目標(biāo) SDK 為 22 或更低:如果您在清單中列出了危險(xiǎn)權(quán)限坏瞄,則用戶必須在安裝應(yīng)用時(shí)授予此權(quán)限;如果他們不授予此權(quán)限鸠匀,系統(tǒng)根本不會(huì)安裝應(yīng)用缀棍。
- 如果設(shè)備運(yùn)行的是 Android 6.0 或更高版本,或者應(yīng)用的目標(biāo) SDK 為 23 或更高:應(yīng)用必須在清單中列出權(quán)限诽凌,并且它必須在運(yùn)行時(shí)請(qǐng)求其需要的每項(xiàng)危險(xiǎn)權(quán)限侣诵。用戶可以授予或拒絕每項(xiàng)權(quán)限,且即使用戶拒絕權(quán)限請(qǐng)求杜顺,應(yīng)用仍可以繼續(xù)運(yùn)行有限的功能躬络。
Android 在ActivityCompat
類中提供了一個(gè)靜態(tài)方法,即shouldShowRequestPermissionRationale()
提茁,如果應(yīng)用之前請(qǐng)求過此權(quán)限但用戶拒絕了請(qǐng)求馁菜,此方法將返回true汪疮。您可以采用的一個(gè)方法是僅在用戶已拒絕某項(xiàng)權(quán)限請(qǐng)求時(shí)提供解釋。如果用戶繼續(xù)嘗試使用需要某項(xiàng)權(quán)限的功能智嚷,但繼續(xù)拒絕權(quán)限請(qǐng)求盏道,則可能表明用戶不理解應(yīng)用為什么需要此權(quán)限才能提供相關(guān)功能猜嘱。對(duì)于這種情況衅枫,比較好的做法是顯示解釋为鳄。
而使用EasyPermissions框架
時(shí)腕让,它的
public static void requestPermissions(
@NonNull Activity host, @NonNull String rationale,
int requestCode, @NonNull String... perms)
方法中纯丸,第二個(gè)參數(shù)rationale
就是要顯示的解釋信息觉鼻,而且此方法中也調(diào)用了shouldShowRequestPermissionRationale()
。顯示解釋的對(duì)話框僅在用戶之前已拒絕某項(xiàng)權(quán)限但又接著使用需要此權(quán)限的功能時(shí)彈出萨惑,即第一次請(qǐng)求不彈出,第二次請(qǐng)求前彈出解总。
Paste_Image.png
- 如果應(yīng)用請(qǐng)求其清單中列出的危險(xiǎn)權(quán)限花枫,而應(yīng)用目前在權(quán)限組中沒有任何權(quán)限掏膏,則系統(tǒng)會(huì)向用戶顯示一個(gè)對(duì)話框馒疹,描述應(yīng)用要訪問的權(quán)限組。對(duì)話框不描述該組內(nèi)的具體權(quán)限溺蕉。例如,如果應(yīng)用請(qǐng)求READ_CONTACTS 權(quán)限哗魂,系統(tǒng)對(duì)話框只說明該應(yīng)用需要訪問設(shè)備的聯(lián)系信息录别。如果用戶批準(zhǔn),系統(tǒng)將向應(yīng)用授予其請(qǐng)求的權(quán)限葫男。
- 如果應(yīng)用請(qǐng)求其清單中列出的危險(xiǎn)權(quán)限,而應(yīng)用在同一權(quán)限組中已有另一項(xiàng)危險(xiǎn)權(quán)限崔列,則系統(tǒng)會(huì)立即授予該權(quán)限梢褐,而無需與用戶進(jìn)行任何交互。例如赵讯,如果某應(yīng)用已經(jīng)請(qǐng)求并且被授予了 READ_CONTACTS 權(quán)限盈咳,然后它又請(qǐng)求 WRITE_CONTACTS,系統(tǒng)將立即授予該權(quán)限边翼。