標(biāo)簽(空格分隔): Android
[ANdroid 6.0基礎(chǔ)知識][3]
1、在 Android 的各個版本中,不論是普通權(quán)限還是敏感權(quán)限(運行時權(quán)限),都需要在 manifest 文件中聲明
2、關(guān)于解釋需要權(quán)限的原因可以看一下這篇[博客][1],而且這篇博客對權(quán)限組的授權(quán)改變、用戶勾選不再提醒對話框時,下次不再彈對話框來授予權(quán)限時的情況考慮的比較詳細
Android 系統(tǒng)提供了shouldShowRequestPermissionRationale()方法來幫助開發(fā)者判斷是否需要向用戶解釋需要權(quán)限的原因。當(dāng)某條權(quán)限之前已經(jīng)請求過,并且用戶已經(jīng)拒絕了該權(quán)限時,shouldShowRequestPermissionRationale ()方法返回的是 true
如果app之前請求過該權(quán)限,被用戶拒絕, 這個方法就會返回true.
如果用戶之前拒絕權(quán)限的時候勾選了對話框中”Don’t ask again”的選項,那么這個方法會返回false.
如果設(shè)備策略禁止應(yīng)用擁有這條權(quán)限, 這個方法也返回false.
參考文章:[鏈接][2]
系統(tǒng)自動回調(diào)的情況:
有一些情形下,調(diào)用
1.自動授權(quán): 如果用戶已經(jīng)允許了permission group中的一條A權(quán)限,那么當(dāng)下次調(diào)用requestPermissions()方法請求同一個group中的B權(quán)限時, 系統(tǒng)會直接調(diào)用onRequestPermissionsResult() 回調(diào)方法, 并傳回PERMISSION_GRANTED的結(jié)果.
2.自動拒絕: 如果用戶選擇了不再詢問此條權(quán)限,那么app再次調(diào)用requestPermissions()方法來請求同一條權(quán)限的時候,系統(tǒng)會直接調(diào)用onRequestPermissionsResult()回調(diào),返回PERMISSION_DENIED.
經(jīng)驗證, 請求權(quán)限對話框中的”Don’t ask again”的選項, 只有該條權(quán)限之前的狀態(tài)是Denied的時候,才會出現(xiàn).
以前從未授權(quán)(即第一次彈框), 或者之前的狀態(tài)是Granted(當(dāng)然這種情況一般不會彈框詢問), 出現(xiàn)的彈框都是不帶該不再詢問的選項的.
參考[實踐文章一][4]、[實踐文章二][5]
[一行代碼解決Android M新的運行時權(quán)限問題][6]
建議在短期內(nèi)暫時可以不考慮支持該運行時權(quán)限機制,等時機成熟或者簡單易用的第三方庫完善之后再支持也未嘗不可。
[1]: https://kingideayou.github.io/2015/11/09/Android_M_permissions/
[2]: http://www.cnblogs.com/mengdd/p/4892856.html
[3]: https://blog.coding.net/blog/understanding-marshmallow-runtime-permission
[4]: http://jijiaxin89.com/2015/08/30/Android-s-Runtime-Permission/
[5]: https://yanlu.me/android-m6-0-permission-chasm/
[6]: http://www.itdecent.cn/p/d3a998ec04ad