Android 動態(tài)權(quán)限中shouldShowRequestPermissionRationale怎么理解,判斷權(quán)限被禁止

前言

Android6.0之后的有些權(quán)限需要去動態(tài)獲取捡偏,這個過程中呢唤冈,我們或許會遇到這么幾個方法。
1.ContextCompat.checkSelfPermission 檢查權(quán)限是否允許
2.ActivityCompat.requestPermissions 請求某個或某幾個權(quán)限
3.onRequestPermissionsResult 手動請求權(quán)限之后的結(jié)果回調(diào)
4.shouldShowRequestPermissionRationale 银伟?你虹??

其中前三個的用途都非常清楚彤避,大家也都知道怎么用的傅物,這里不做過多解釋,今天主要看下咱們的主角shouldShowRequestPermissionRationale琉预,看下它是干什么用的董饰。從shouldShowRequestPermissionRationale這么長的方法名,解釋出來就是“應(yīng)不應(yīng)該解釋下請求這個權(quán)限的目的”圆米,接下來卒暂,咱們先看它的官方注釋。

官方解釋

 /**
     * Gets whether you should show UI with rationale for requesting a permission.
     * You should do this only if you do not have the permission and the context in
     * which the permission is requested does not clearly communicate to the user
     * what would be the benefit from granting this permission.
     * <p>
     * For example, if you write a camera app, requesting the camera permission
     * would be expected by the user and no rationale for why it is requested is
     * needed. If however, the app needs location for tagging photos then a non-tech
     * savvy user may wonder how location is related to taking photos. In this case
     * you may choose to show UI with rationale of requesting this permission.
     * </p>
     *
     * @param activity The target activity.
     * @param permission A permission your app wants to request.
     * @return Whether you can show permission rationale UI.

蹩腳翻譯

獲取是否應(yīng)顯示具有請求權(quán)限理由的UI娄帖,只有在沒有權(quán)限并且上下文的情況下不能清晰明了的表明為什么需要這個權(quán)限時才應(yīng)該這樣做也祠。舉例,你要是實現(xiàn)一個照相的app近速,用戶可以明白你為什么需要照相的權(quán)限诈嘿,然而app卻需要定位信息去給照片做標注,一個非技術(shù)又精明的用戶可能很好奇一個拍照APP怎么會想要定位權(quán)限数焊。在這種情況下您可以選擇在請求定位權(quán)限之前先在UI上解釋下為什么需要它永淌。
返回:你是否可以展示權(quán)限的解釋說明

  看完之后你明白了嗎?講真佩耳,我是真不明白遂蛀,這段注釋只說明了Google工程師設(shè)計這個方法的初衷是什么,具體有什么功能干厚,怎么用的李滴,從這里我真的還看不錯來。

網(wǎng)絡(luò)資源參考

Android6.0動態(tài)權(quán)限shouldShowRequestPermissionRationale的含義這篇文章蛮瞄,說明的是比較有價值的:

以某個權(quán)限為例所坯,
1.第一次請求權(quán)限時ActivityCompat.我使用的是8.0系統(tǒng)的手機=false;
2、第一次請求權(quán)限被禁止挂捅,但未選擇【不再提醒】ActivityCompat.shouldShowRequestPermissionRationale=true;
3芹助、允許某權(quán)限后ActivityCompat.shouldShowRequestPermissionRationale=false;
4、 禁止權(quán)限,并選中【禁止后不再詢問】ActivityCompat.shouldShowRequestPermissionRationale=false状土;
文章中記錄的結(jié)果和我真實手機跑程序打印的結(jié)果是一致的(我使用的是8.0系統(tǒng)的手機)无蜂。

shouldShowRequestPermissionRationale的功能價值何在

在此之前先說明下,由于不同的系統(tǒng)廠商定制的結(jié)果蒙谓,
1.有的手機某些權(quán)限清單注冊了權(quán)限就能用斥季,不用動態(tài)申請(因為系統(tǒng)會在安裝時自動app分配一些權(quán)限,具體怎么分配的這里暫不做討論)累驮;
2.有的手機在彈出授權(quán)時選擇拒絕就默認了不再彈出酣倾;
3.有的沿用了原生系統(tǒng)的規(guī)則;
4.設(shè)置-應(yīng)用-權(quán)限中權(quán)限分“允許谤专、詢問躁锡、拒絕”三個級別,但是有的權(quán)限只有“允許毒租、拒絕”兩個級別稚铣;

這里先統(tǒng)一下名詞:
允許 -- 權(quán)限通過
拒絕--拒絕了但是還允許詢問
禁止--拒絕了且不再允許詢問(如4中所述的“拒絕”先定義為禁止)

從前面就可以看出來,這個方法大部分情況下是放回false的墅垮,只有被用戶拒絕了權(quán)限惕医,再次獲取才會得到true;如果沒有申請過算色,或者禁止了權(quán)限抬伺,都是返回的false。所以很多人想要通過shouldShowRequestPermissionRationale去判斷是否權(quán)限被禁止灾梦,有時候是并不準確的峡钓,真要說怎樣會準確的獲取到權(quán)限被禁止的情況,那就是:

1.在requestPermissions之后在
onRequestPermissionsResult中獲取到?jīng)]給權(quán)限若河,并且shouldShowRequestPermissionRationale是false能岩,此時可以認定該權(quán)限被用戶禁止了;
2.還有一個點是是在onRequestPermissionsResult的參數(shù)值第三個參數(shù)grantResults是null,此時權(quán)限也是被拒絕的萧福。(權(quán)限被拒絕后再次調(diào)用requestPermissions拉鹃,沒有返回結(jié)果)

總結(jié)

shouldShowRequestPermissionRationale,回到最初的解釋“應(yīng)不應(yīng)該解釋下請求這個權(quán)限的目的”鲫忍。
1.都沒有請求過這個權(quán)限膏燕,用戶不一定會拒絕你,所以你不用解釋悟民,故返回false;
2.請求了但是被拒絕了坝辫,此時返回true,意思是你該向用戶好好解釋下了射亏;
3.請求權(quán)限被禁止了近忙,也不給你彈窗提醒了竭业,所以你也不用解釋了,故返回fasle;
4.請求被允許了银锻,都給你權(quán)限了永品,還解釋個啥,故返回false击纬。

Google的初衷大概就是第一次requestPermissions的時候被拒絕時給你一次解釋的機會,所以是讓你在請求權(quán)限的回調(diào)中使用的钾麸。

其它

  動態(tài)權(quán)限的適配就是檢測更振、請求,然后看回調(diào)饭尝,再通過了權(quán)限后再去執(zhí)行自己的方法肯腕,但是真正用的時候又很麻煩,每次調(diào)用相機钥平、短信实撒、打電話、訪問通訊錄涉瘾、定位等等都要請求權(quán)限知态,寫一堆跟業(yè)務(wù)無關(guān)的代碼,是不是很煩呢立叛?

  最近整理了一個關(guān)于方便管理動態(tài)權(quán)限的庫负敏,[Android 6.0動態(tài)權(quán)限獲取:一個EasyPermission的權(quán)限管理庫](http://www.reibang.com/p/671fbbb48551)

附github源碼:https://github.com/githubZYQ/easypermission

最后

祝所有人平安幸福秘蛇、家庭和睦其做、身體健康。

愿世界和平赁还,不再被戰(zhàn)爭所累妖泄。

有任何疑問,可以及時反饋給我艘策;

如果你覺得還不錯蹈胡,請點贊o( ̄▽ ̄)d。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柬焕,一起剝皮案震驚了整個濱河市审残,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斑举,老刑警劉巖搅轿,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異富玷,居然都是意外死亡璧坟,警方通過查閱死者的電腦和手機既穆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雀鹃,“玉大人幻工,你說我怎么就攤上這事±杈ィ” “怎么了囊颅?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長傅瞻。 經(jīng)常有香客問我踢代,道長,這世上最難降的妖魔是什么嗅骄? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任胳挎,我火速辦了婚禮,結(jié)果婚禮上溺森,老公的妹妹穿的比我還像新娘慕爬。我一直安慰自己,他們只是感情好屏积,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布医窿。 她就那樣靜靜地躺著,像睡著了一般肾请。 火紅的嫁衣襯著肌膚如雪留搔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天铛铁,我揣著相機與錄音隔显,去河邊找鬼。 笑死饵逐,一個胖子當著我的面吹牛括眠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倍权,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掷豺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了薄声?” 一聲冷哼從身側(cè)響起当船,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎默辨,沒想到半個月后德频,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡缩幸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年壹置,在試婚紗的時候發(fā)現(xiàn)自己被綠了竞思。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钞护,死狀恐怖盖喷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情难咕,我是刑警寧澤课梳,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站余佃,受9級特大地震影響惦界,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咙冗,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漂彤。 院中可真熱鬧雾消,春花似錦、人聲如沸挫望。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳板。三九已至桑腮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛉幸,已是汗流浹背破讨。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奕纫,地道東北人提陶。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像匹层,于是被迫代替她去往敵國和親隙笆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容