安卓6.0新权限系统分类

在安卓6.0版本以后,新的权限系统出现了,为了更好的保护用户的安全,新的权限系统需要开发者在代码中手动申请,所以为了适配6.0权限系统,我们不得不学习权限系统

安卓6.0新权限系统分类有两种

  1. 普通权限(normal):这个权限类型并不直接威胁到用户的隐私,可以直接在manifest清单里注册,系统会帮我们默认授权的
  2. 危险权限 (dangerous):这个可以直接给app访问用户一些敏感的数据,不仅需要在manifest清单里注册,同时在使用的时候,需要向系统请求授权

危险权限的特点

  • 危险权限是按组分配的,只要同个组的某个权限被同意后,组中的其他权限也会被默认同意

普通权限列表图

危险权限分组图

申请单一或多个权限

申请权限很人性化,类似我们的签证办手续一样,其申请步骤有

  1. 申明该权限
  2. 检查是否已经有该权限
  3. 如果没有则进行申请权限
  4. 接收申请成功或者失败回调

① 要使用权限时,别忘了要在manifest中申请

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

② 申请单一权限

private static final int Location_Permission = 0x01;private void requestPermission() {//1. 检查是否已经有该权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {   //2. 权限没有开启,请求权限ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, Location_Permission);}else{//权限已经开启,做相应事情}
}//3. 接收申请成功或者失败回调
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == Location_Permission) {if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//权限被用户同意,做相应的事情} else {//权限被用户拒绝,做相应的事情}}super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

③ 申请多个权限

如要你要同时申请多个权限,那么可以在requestPermissions传进要申请的权限即可

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.CAMERA}, Location_Permission);

④ 判断安卓6.0系统

为了代码的严谨性,在安卓6.0以下我们就不用手动申请了,这里就需要判断一下安卓的版本

if (Build.VERSION.SDK_INT >= 23) {requestPermission();
}

解决用户多次拒绝权限或点击不再提示

很多时候用户不小心点击拒绝,或者害怕手机信息被盗而点拒绝,当第二次进入程序时,我们要进行相对应的处理,这里先看下面这个方法的说明

  • shouldShowRequestPermissionRationale()

    1. 第一次请求权限时,用户拒绝了,调用shouldShowRequestPermissionRationale()后返回true,应该显示一些为什么需要这个权限的说明
    2. 用户在第一次拒绝某个权限后,下次再次申请时,授权的dialog中将会出现“不再提醒”选项,一旦选中勾选了,那么下次申请将不会提示用户
    3. 第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项,调用shouldShowRequestPermissionRationale()后返回false

知道了这个方法的原理后,那么代码就很快就可以写出来了,下面就直接贴上完整代码

public class PermissionActivity extends AppCompatActivity {private static final int Location_Permission = 0x01;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_permission);if (Build.VERSION.SDK_INT >= 23) {requestPermission();}}private void requestPermission() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {//询问用户是否拒绝过,如果没有,该方法返回false,如果被拒绝过,该方法返回trueif (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {// 用户拒绝过这个权限了,应该提示用户,为什么需要这个权限new AlertDialog.Builder(this).setTitle("友好提醒").setMessage("没有定位权限将不能搜索附近蓝牙,请把定位权限赐给我吧!").setPositiveButton("赏你", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.cancel();// 用户同意继续申请}}).setNegativeButton("不给", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.cancel();// 用户拒绝申请}}).show();} else {// 申请授权。ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, Location_Permission);}}}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == Location_Permission) {if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//权限被用户同意,做相应的事情} else {//权限被用户拒绝,做相应事情}}super.onRequestPermissionsResult(requestCode, permissions, grantResults);}
}

实现效果图

代码下载

Android基础——适配安卓6.0新权限系统相关推荐

  1. android功能导航布局,安卓9.0新功能 屏幕旋转将与导航栏同窗

    中关村在线消息:今天早些时候谷歌向开发者们推送了Android P(也称安卓9.0)的首个开发者预览版,在原先8.0的基础上进一步改进了通知栏,也为刘海屏幕专门进行了优化.意味着未来"刘海& ...

  2. 谷歌手机升级android10,Android Q安卓10.0新特性,首批支持升级21款手机

    原标题:Android Q安卓10.0新特性,首批支持升级21款手机 2019年5月8日,一年一度的谷歌I/O开发者大会在美国加州如期召开,并发布了全新系列Android Q(安卓10.0)操作系统, ...

  3. [Android多媒体二]调用系统录音机录音并存储到指定位置,适配安卓 7.0

    接上一篇文章,[Android多媒体一]调用系统相机拍照并存储到指定位置,适配安卓 7.0 本文讲述如何调用系统录音机,完成录音后,对录音进行指定位置的保存. 一.开始编写 首先,还是理清一下思路,在 ...

  4. android 5.0 新功能,Android 5.0新特性有哪些?安卓5.0新功能汇总

    Android 5.0新特性有哪些?经过一段时间曝光与测试后,期待已久的Android L系统正式发布了,新一代安卓系统正式名称为Android 5.0 Lollipop(棒棒糖).Android 5 ...

  5. 小米5s+刷+android+8.0,小米:正加速为小米5s系列适配安卓8.0

    01小米5s后续也将升安卓8.0 中关村在线消息:近日,小米因迟迟不为小米5s/5s Plus两款机型升级安卓8.0系统,且在升级MIUI 10后很多朋友发现,相较前代系统并没有太大更新,就跟只换了套 ...

  6. 这应该是适配安卓8.0最好的亲身列子了。。。。

    随着市面上8.0的安卓手机日渐增多,我们公司app也要适配到安卓8.0.在适配的过程中,也发现了很多问题,也特此记录一下! 第一个,权限问题.因为我公司的app的 TargetSdkVersion的版 ...

  7. 华为mate8 android7,华为适配安卓7.0机型除了P9/Mate 8还有它们

    原标题:华为适配安卓7.0机型除了P9/Mate 8还有它们 上周,部分华为P9与Mate 8的升级EMUI 5.0计划已经悄悄展开.微博网友爆料,华为EMUI 5.0的推送开始了.需要强调的是,此次 ...

  8. flyme android os 耗电,魅族运行安卓5.0 Flyme OS系统实测 性能流畅度提升

    魅族上个月开启了安卓5.0 Flyme OS系统的测试,首先适配的是MX4 Pro,现在我们来看看安卓5.0 Flyme OS系统的实测体验. 首先简单罗列一下已知的部分新特性: - Android ...

  9. 基于android 10的国产手机,正式发布,首款基于安卓9.0的国产手机系统,却只支持这几款机型...

    在8月底成功首发了7nm制程的麒麟980处理器后,华为仿佛进入了爆发模式,在9月初先后发布了荣耀8X.荣耀8XMAX.华为麦芒7三款手机,其中荣耀8X更是以自家中端麒麟710处理器挑战采用了高端处理器 ...

最新文章

  1. 编译原理-First集和Follow集
  2. django(权限、认证)系统—— 基于Authentication backends定制
  3. 如何使用免安装的mysql-孤单的小孩儿-搜狐博客
  4. 第三方登录 人人php,人人网第三方登录接口方案
  5. linux服务器配置jdk1.8
  6. HDFS文件和HIVE表的一些操作
  7. 用户登录python_python用户登录系统
  8. 【iCore4 双核心板_ARM】例程二十九:SD_IAP_FPGA实验——更新升级FPGA
  9. Safari/Chrome浏览器打不开淘宝/天猫网页怎么办?
  10. flex学习的博客...还是挺详细的
  11. 国家统计局统计用区划代码和城乡划分代码---爬虫、详细分析
  12. AI智能语音识别算法原理 四
  13. 怎么设置访问服务器文件夹权限凭据,Windows server 共享文件夹权限设置
  14. Cross-Lingual NER Using Parallel Corpus: A New Approach Using XLM-RoBERTa Alignment
  15. python写网络爬虫的环境搭建(windows完整版)
  16. <C++>初识多态,剖析virtual关键字
  17. JAVA解析字符串数学公式
  18. 服务器固态硬盘连接,技术支招:服务器中固态硬盘如何选?
  19. 第三章 微分中值定理与导数的应用
  20. 佳能数码相机,不能安装驱动程序

热门文章

  1. 巡风xunfeng安装--windows篇
  2. FusionCompute8.0.0实验(1)CNA及VRM安装
  3. 谁说老百姓就一定要买得起房?
  4. 一文解决,IntelliJ IDEA 2018 关闭代码重复波浪线
  5. SQLZOO more JOIN
  6. UGUI-- ScrollBar 滚动条
  7. Goby 利用内存马中的一些技术细节【技术篇】
  8. Android Studio安装更新终极解决方式,flutter页面跳转防止页面重复刷新
  9. 关于sklearn库的安装
  10. php网页分享时显示图片怎么设置,分享html页面 在微信分享中可以设置分享标题和描述和图片...