前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android权限申请与打开权限设置页面

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

作者头像
码客说
发布2020-07-03 10:21:56
5.3K0
发布2020-07-03 10:21:56
举报
文章被收录于专栏:码客码客

前言

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

代码语言:javascript
复制
// 权限
implementation 'com.yanzhenjie:permission:2.0.3'

获取权限

代码语言:javascript
复制
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();
}

打开权限设置页面

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

代码语言:javascript
复制
/**
 * 跳转到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)
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 获取权限
  • 打开权限设置页面
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档