zoukankan      html  css  js  c++  java
  • android 授权简单使用

    首先要在AndroidManifest.xml 加入权限 这里以存储权限和相机权限 来演示

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.test.app">
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.CAMERA" />
        .....
    </manifest>

    可以先检查是否有权限

    val permission =
    ActivityCompat.checkSelfPermission(
        context,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
    ) == PackageManager.PERMISSION_GRANTED
    ​
    val cameraPermission =
    ActivityCompat.checkSelfPermission(
        context,
        Manifest.permission.CAMERA
    ) == PackageManager.PERMISSION_GRANTED
    ​
    ​
    if (permission && cameraPermission) {
        //有权限了
        val file = File("路径")
        if (!file.exists() || !file.isDirectory) {
            try {
                //创建好文件夹 为后面操作文件做准备
                file.mkdirs()
            } catch (e: IOException) {
    ​
            }
        }
    }else{
        //这里调用授权请求
    }

    授权请求

    try {
        ActivityCompat.requestPermissions(
            activity,//fragment 中使用 requireActivity()  activity 中使用this即可
            arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE
                    ,Manifest.permission.CAMERA
                   ),
            1 //requestCode  自己随便定义一个数字即可  在回调的时候知道就行
        )
    } catch (e: Exception) {
        //防止出问题 不catch的话 部分情况下会闪退 (禁用权限后,再次请求的话会闪退,使用模拟器和荣耀10测试,其他机型不清楚)
    }

    接下来是授权请求回调 (frgament 和 activity回调函数一样)

    override fun onRequestPermissionsResult(
            requestCode: Int,
            permissions: Array<out String>,
            grantResults: IntArray
        ) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults)
            if (requestCode == 1) {
                val result = grantResults[0] == PackageManager.PERMISSION_GRANTED
                val result2 = grantResults[1] == PackageManager.PERMISSION_GRANTED
                if (result && result2) {
                    //授权成功
                }else{
                    Toast.makeText(context, "您取消了授权,如果您想要授权的话请到 设置-应用 找到"测试"应用手动授予相应权限", Toast.LENGTH_SHORT).show()
                }
            }
        }

    判断权限是否被拒绝过

    val has = ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)
    //首次安装app   未授权 has = false 这里就有点坑爹了,没有授权需要去授权返回false很蒙蔽了
    //拒绝后       has = true
    //授权后       has = false   这里授权后不需要授权正常
    //拒绝后不在提示 has = false   这里不能授权也正常
    //感觉shouldShowRequestPermissionRationale好像没啥用处,纯粹出来打酱油的
    //我们下面的分析 因为首次未授权返回false 所在在为false的情况下我们请求授权,一旦用户拒绝后返回true 此时情况下
    //我们不在让用户去授权,就是不在让用户有看见拒绝后不在提示的选项 ,而是直接让用户跳转到app详细设置页,手动去授权

    //has为true的情况下 不要在去请求权限了,可以使用弹框提示用户自己去设置开启权限
    //否则再次弹出的话,会出现禁止后不再提示 当用户点击禁止后不再提示 就不会弹出请求框了
    //再次判断是否拒绝过 会返回true 所以我们需要在权限被用户禁用一次后,就不再去请求权限
    //而是使用弹框提示用户 这样用户来使用该功能的时候,
    //我们每次可以给一个提示,让用户自己手动选择开启权限

     

  • 相关阅读:
    Java实现 蓝桥杯 算法提高 7-1用宏求球的体积
    Java实现 蓝桥杯 算法提高 递推求值
    Java实现 蓝桥杯 算法提高 矩阵相乘
    当时忍住就好了——关键时刻忍得住,告别容易后悔的人生
    心若向阳,何惧忧伤——没有注定的不幸,只有死不放手的执着——人大部分的痛苦,都是不肯离场的结果
    你只需努力 剩下的交给时光(你不对自己狠,就别怪别人对你狠)
    事情已经到了这一步,要赌就只能全力以赴——红朝的那些事情(四三二)
    SlimFTPd, LFTP和FileZilla Client/Server
    Redis .NET开源组件Beetle.Redis
    .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式2
  • 原文地址:https://www.cnblogs.com/rchao/p/14072046.html
Copyright © 2011-2022 走看看