Android6.0运行时权限请求

Android6.0运行时权限请求

Android在SDK23(Android 6.0)之后将权限作了区分,一种是普通权限,一种是6.0权限也就是危险权限。普通权限和之前的没有什么区别,而危险权限除了需要在Manifest中进行声明外还需要在运行时进行手动申请,只有在申请后用户同意了才能使用该权限。

权限与版本兼容

  • 手机版本<23 & targetSdkVersion<23
    默认获得所有权限
  • 手机版本<23 & targetSdkVersion>23
    默认获得所有权限
  • 手机版本>23 & targetSdkVersion<23
    默认获得所有权限,用户可以自行在应用管理进行关闭
  • 手机版本>23 & targetSdkVersion>23
    默认获得普通权限,危险权限需要手动申请

Note:这里说的默认获得所有权限并非真正可靠的权限,根据厂商定制化不同,可能会提示用户手动判断是否同意打开权限,只是通常情况先默认为获取,并且无论用户选择是否同意,用RuntimePermission的权限判断机制去获取始终返回已经获得该权限。

权限分级列表

权限申请API

  • 权限常量

    所有权限都以静态常量的形式保存在Manifest.permission类下,如:文件读取权限Manifest.permission.READ_EXTERNAL_STORAGE

  • 检查是否具有某个权限

    public static int 
    ContextCompat.checkSelfPermission(Context context, String permission)
    
    //返回值为PackageManager.PERMISSION_DENIED 则表示不具备该权限
    //返回值为PackageManager.PERMISSION_GRANTED 则表示具备该权限
    
  • 权限请求

    public static void
    ActivityCompat.requestPermissions(Activity activity,String[] permissions,  @IntRange(from = 0) int requestCode)
    
    //参数依次是
    //Activity实例权限数组
    //请求码(用于判断请求回调)
    
  • 权限请求结果回调

    //需要在Activity中监听,重写对应方法
    override fun 
    onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) 
    
    //参数依次是
    //请求码
    //请求权限数组
    //授权结果 同检测权限返回值类型相同
    
  • 检查用户是否禁用权限申请框(即选择了拒绝,并且不在提醒)

    public static boolean
    ActivityCompat.shouldShowRequestPermissionRationale(Activity activity,
    String permission)
    
    //如果被禁用了返回false,可以正常显示为true
    
  • 跳转到应用权限设置界面(通用,不保证个别国产系统)

                        val intent = Intent()
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                        intent.action = "android.settings.APPLICATION_DETAILS_SETTINGS"
                        intent.data = Uri.fromParts("package", packageName, null)
    

封装

懒得自己动手写的筒子们 这里提供一个自用Kotlin封装好的基于Activity的权限请求框架:6.0权限请求框架

Google 6.0权限说明 官方网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值