在應用申請權限時,如果用戶選擇了禁止後不再提示(不再詢問),那麼未來再次向用戶請求該權限時,系統將會默認禁止該權限。
這時候只能靠用戶手動去授予權限,通過設計一個提示選擇框來讓用戶選擇,如果用戶的確是想要授予該權限,那麼就跳轉至該應用的權限設置界面。
1、判斷該權限是否處於禁止後不再提示(不再詢問)
2、提醒用戶我們需要該權限,是否前往設置
3、跳轉當前應用的權限設置頁面
1、檢查權限狀態
使用 ContextCompat.checkSelfPermission() 方法來檢查權限的授予狀態。它將返回一個常量值,這個在 上篇文章 中有提到過。然後再使用 ActivityCompat.shouldShowRequestPermissionRationale() 方法判斷該權限是否能夠彈出帶有請求權限的彈窗,這個是判斷權限是否處於不再詢問狀態的重要方法。
根據上面兩個方法,結合其邏輯則需要 checkSelfPermission() 方法返回“權限未被授予的狀態常量”,同時 shouldShowRequestPermissionRationale() 方法判斷該權限為“無法彈出權限申請框”,也就是返回布爾值 false。
同時滿足上面這兩個條件就表示該權限處於不再詢問的狀態。判斷權限是否處於不再詢問狀態的代碼有點小BUG,它必須申請過一次權限並且用戶做出了選擇之後判斷才能夠準確。
2、創建 AlertDialog 對話框
使用 AlertDialog.Builder 構造器來創建一個對話框對象,然後再使用 setTitle、setMessage 等方法構造對話框的標題及信息等。
3、跳轉權限設置頁面
使用 Intent 和 startActivity() 等方法跳轉到當前應用的詳情頁面進行權限設置。
或者你也可以根據包名和類名來打開指定機型的權限管理界面的 Activity,不同的機型打開權限管理界面的方法都不同,所以你需要一個一個去適配其包名和類名。可以通過 ADB 命令來獲取不同手機機型裡權限界面的包名和類名(具體方法這裡就不介紹了)。
4、完整代碼示例
【代碼文件】activity_main.xml
【代碼文件】AndroidManifest.xml
【代碼文件】MainActivity.java
// ContextCompat.checkSelfPermission(Activity, permission);
// ActivityCompat.shouldShowRequestPermissionRationale(Activity, permission);
// 特別注意:判斷權限是否處於不再詢問狀態的代碼有點小BUG,它必須申請過一次權限並且用戶做出了選擇之後判斷才能夠準確
如果文章中含有某些錯誤或其它問題,歡迎在下方評論留言,我會及時修改。
轉載請超鏈接註明:頭條資訊 » Android請求權限之不再詢問或禁止不再提示
免責聲明 :非本網註明原創的信息,皆為程序自動獲取互聯網,目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,並提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件24小時內刪除。