Android权限申请与打开权限设置页面

前言

应用的使用需要申请权限,但是如果用户禁用掉,或者禁用并不再提醒就必须到系统设置中开启。

// 权限
implementation 'com.yanzhenjie:permission:2.0.3'

获取权限

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();
}

打开权限设置页面

我们可以打开系统的设置页面,但是该页面会有应用卸载的功能,为了让用户直接跳转到应用权限页面,我们就要根据不同的系统进行调用。

/**
 * 跳转到miui的权限管理页面
 */
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)
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇