android手機許可權動態申請的那些坑(附帶kotlin的動態申請程式碼)
阿新 • • 發佈:2019-01-08
首先注意一點:在清單檔案內沒有進行申明的許可權進行動態申請時,並不會彈窗
確保需要申請的許可權已經在清單檔案中申明以後,就可以根據相應的功能進行申請:
該部落格只涉及使用Google提供的官方庫進行處理
首先在app的構建檔案中匯入
implementation ‘pub.devrel:easypermissions:1.0.1’
然後開始編輯動態申請的許可權工具類
class PermissionUtils(var activity: Activity, var callback: CallBackInterface) : EasyPermissions.PermissionCallbacks {
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>?) { if (EasyPermissions.somePermissionPermanentlyDenied(activity, perms!!)) { AppSettingsDialog.Builder(activity).build().show() }else{ callback.success() } } override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>?) { if (callback != null) { callback.success() } } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) { //將請求結果傳遞EasyPermission庫處理 EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) } fun requestPermission(perms: Array<String>) { var check = PermissionManager.checkPermission(activity, perms) if (!check) { PermissionManager.requestPermission(activity, "為了功能正常使用,請允許以下許可權", 1000, perms) }else{ callback.success() } }
}
CallBackInterface只是為了非同步互動而接入的介面,裡面的方法就倆,一個success 一個erro
manage裡面的內容是呼叫google外掛的內容
object PermissionManager {
fun checkPermission(context: Activity, perms: Array<String>): Boolean { return EasyPermissions.hasPermissions(context, *perms) } /** * 請求許可權 * @param context */ fun requestPermission(context: Activity, tip: String, requestCode: Int, perms: Array<String>) { EasyPermissions.requestPermissions(context, tip, requestCode, *perms) }
}
相應許可權的呼叫如此實現,比如:我需要申請一個定位許可權,需要在該activity內接入CallBackInterface介面,然後傳入utils便可:
PermissionUtils(this,this).requestPermission(arrayOf(“android.permission.ACCESS_FINE_LOCATION”,
“android.permission.ACCESS_COARSE_LOCATION”))