【Android】权限问题

一.Boat

  1. 手机升级安卓10.0后突然视频放不出来了。后来百度找到了解决方法

在manifest的application里面加上这句就好了 android:requestLegacyExternalStorage=“true”

  1. 在AS中import module时可能会存在应用dependencies时无法显示本地的module,这个时候应该查看settings.gradle是否有相应的app配置,当然主app只能配一个
  2. Device File Explore 查看资源入口,最简单的方法是看看右边侧边栏有没有,一般都是有的
  3. okhttp的发送情况,比如说请求头啦,这个在Faraway里面写了,还有 http,https的关联啦
  4. Configure build 下载慢的问题,情况一可能是访问google和jcenter被墙了,用阿里镜像替代,防止最外层的全局build.gradle中,还有一个方法是加速的传送门
    repositories {
    
    
        maven{
    
     url 'http://maven.aliyun.com/nexus/content/groups/public/'}
        google()
      /*  google()
        jcenter()*/
    }

    allprojects {
    
    
        repositories {
    
    
            maven{
    
     url 'http://maven.aliyun.com/nexus/content/groups/public/'}
            google()
            /*   google()
               jcenter()*/
        }
    }
  1. 安卓权限
    1)实现理念
    a. 权限先定义到静态字符数组
    b. 判断当前系统是否是Android6.0(对应API 23)以及以上,检查写文件的权限(比较典型),没有就动态申请,三个参数(当前类,权限集,请求码)
    c…回调函数,申请权限后回调onRequestPermissionResult函数,同样也三个参数

二.优化升级

普通权限在清单文件中注册就可以了,但危险权限必须动态申请

  1. initdata中加载数据的部分提取方法-》loadsongs(),在调用数据查询前动态申请
  2. 再封装一个方法(handlePermission),专门处理权限问题,美滋滋
    在这里插入图片描述
  3. 具体升级思路是点到列表界面 弹出权限申请,要是点取消呢,下次到这个界面就都弹出易懂的提升,请求权限分三个步骤
    1)in
    a.android.Manifest.permission.READ_EXTERNAL_STORAGE是SDK下Manifest封装好的一个读取属性简写,第一步检查有没有权限,
    b. ActivityCompat.checkSelfPermission(it,permission)方法是检查权限,第一个参数是context用了lambda表达式,返回是分别是,对应true和false
    在这里插入图片描述
    c.第二个方法,检查若返回值为true则说明用户没看懂,程序需要弹出自定义提示申请
 //处理权限问题
    private fun handlePermission() {
    
    
        val permission=android.Manifest.permission.READ_EXTERNAL_STORAGE
        val checkSelfPermission=context?.let {
    
     ActivityCompat.checkSelfPermission(it,permission) }
        if (checkSelfPermission==PackageManager.PERMISSION_GRANTED){
    
    
            //已经获取
            loadSongs()
        }else{
    
    
            //没有获取权限
            if(activity?.let {
    
     ActivityCompat.shouldShowRequestPermissionRationale(it,permission) }!!){
    
    
                //结果为true则需要弹出对话框进行再次请求
                //AlertDialog  anko封装
                alert("我们只会访问音乐文件,不会访问隐私照片","温馨提示") {
    
    
                    yesButton {
    
     myRequsetPerssion() }
                    noButton {
    
      }
                }.show()
            }else{
    
    
                //不需要弹出
                myRequsetPerssion()
            }
        }
    }

2)core:定义权限申请方法

private fun myRequsetPerssion() {
    
    
        //真正申请权限
        val permissions= arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE)//可以申请多个权限
        requestPermissions(permissions,1)
    }

3)outjudge 请求结果回调

/*
* 接收权限授权结果
* requestCode请求码
* permission权限申请数组
* grantResules申请之后结果//int array 只申请了一个就取首地址
* */
    //结果回调
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    
    
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (grantResults[0]==PackageManager.PERMISSION_GRANTED){
    
    
        loadSongs()
    }
    }

猜你喜欢

转载自blog.csdn.net/qq_38304672/article/details/105647969