api23以及以上的 版本中,对于一些系统认为非常规的权限,需要用户动态的授权。
在老版本中,用户授权是在第一次安装app的时候,如果用户拒绝了某个用户权限,app会安装失败。新版本中,用户获得权限是在app需要用到该权限的时候,去动态的获取权限。
权限申请管理类
ActivityCompat 和ContextCompat
- 检查当前app有没有某项权限
checkSelfPermission
exampleActivityCompat.checkSelfPermission(MediaAuido.this,Manifest.permission.READ_EXTERNAL_STORAGE)
判断有没有读取内存的权限。 - 申请权限
requestPermissions()
注意,如果用户拒绝了一次之后,下次再次调用这个方法的时候,系统并不会弹出提示框,并且,这个权限框与当前活动线程是异步关系,(个人猜测权限提示框在一个系统线程里面)
exampleActivityCompat.requestPermissions(MediaAuido.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 2);
后面的数字requestCode,用于用户操作的回调 - 关于回调 暂时还没用到,
- 提示用户为什么需要该权限,
shouldShowRequestPermissionRationale
当申请权限的时候,提示用户为什么需要当前权限,目前还没用到 - 用户回调监听,``目前未用到
- ps:检查当前的sdk版本
Build.VERSION.SDK_INT >= 23
判断当前版本是不是大于23
ActivityCompat与ContextCompat的关系,
对于权限,MEDIA_CONTENT_CONTROL
和MODIFY_AUDIO_SETTINGS
在代码中请求他们的权限的时候,并不会弹出授权菜单,并且检查有没有这两个权限的时候,一直提示-1,也就是没有权限.没有权限,又不弹出权限授权菜单,和奇怪。