前言
应用的使用需要申请权限,但是如果用户禁用掉,或者禁用并不再提醒就必须到系统设置中开启。
1
| implementation("com.yanzhenjie:permission:2.0.3")
|
获取权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| interface PermissionsCallBack { fun Granted(); }
private fun getPermission(callback: PermissionsCallBack) { if (hasPermissions) { callback.Granted() return } if (AndPermission.hasPermissions(this, *permissions)) { hasPermissions = true callback.Granted() return } AndPermission .with(this) .runtime() .permission(*permissions) .onGranted { hasPermissions = true callback.Granted() } .onDenied { mContext?.let { Toasty.info(it, "授权失败,功能无法使用!").show() AlertDialog.Builder(it) .setTitle("提示") .setMessage("需要打开应用权限才能正常使用!") .setNegativeButton("取消", object : DialogInterface.OnClickListener { override fun onClick(dialog: DialogInterface?, which: Int) { dialog?.dismiss() } }) .setPositiveButton("确定", object : DialogInterface.OnClickListener { override fun onClick(dialog: DialogInterface?, which: Int) { dialog?.dismiss() gotoMiuiPermission() } }).create().show() } } .start(); }
|
打开权限设置页面
我们可以打开系统的设置页面,但是该页面会有应用卸载的功能,为了让用户直接跳转到应用权限页面,我们就要根据不同的系统进行调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
private fun gotoMiuiPermission() { val i = Intent("miui.intent.action.APP_PERM_EDITOR") val componentName = ComponentName( "com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity" ) i.component = componentName i.putExtra("extra_pkgname", activity?.packageName) try { startActivity(i) } catch (e: Exception) { e.printStackTrace() gotoMeizuPermission() } }
private fun gotoMeizuPermission() { val intent = Intent("com.meizu.safe.security.SHOW_APPSEC") intent.addCategory(Intent.CATEGORY_DEFAULT) intent.putExtra("packageName", activity?.packageName) try { startActivity(intent) } catch (e: java.lang.Exception) { e.printStackTrace() gotoHuaweiPermission() } }
private fun gotoHuaweiPermission() { try { val intent = Intent() intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK val comp = ComponentName( "com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity" ) intent.component = comp startActivity(intent) } catch (e: java.lang.Exception) { e.printStackTrace() getAppDetailSettingIntent() } }
private fun getAppDetailSettingIntent() { val intent = Intent() intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.action = "android.settings.APPLICATION_DETAILS_SETTINGS" intent.data = Uri.fromParts("package", activity?.packageName, null) startActivity(intent) }
|