2019独角兽企业重金招聘Python工程师标准>>>

Android开发时,到6.0系统上之后,有的权限就得申请才能用了。

Android将权限分为正常权限 和 危险权限

Android系统权限分为几个保护级别。需要了解的两个最重要保护级别是 正常权限 和 危险权限:

(1)正常权限:

涵盖应用需要访问其沙盒外部数据或资源,但对用户隐私或其他应用操作风险很小的区域。

这些权限在应用安装时授予,运行时不再询问用户。例如: 网络访问、WIFI状态、音量设置等。

(2)危险权限:

涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域。

例如: 读取通讯录、读写存储器数据、获取用户位置等。如果应用声明需要这些危险权限,则必须在运行时明确告诉用户,让用户手动授予。

权限相关知识,权限表请看博客: Android6.0------权限管理

前提:APP运行在Android 6.0 (API level 23)或者更高级别的设备中,而且targetSdkVersion>=23时,系统将会自动采用动态权限管理策略,

先来看看效果图:(注:如果未授权就点击打电话或拍照就会直接闪退,由此6.0必须手动授权,开发时如果未授权,可以判断并提示用户从新授权

上图:

1:单个授权,电话授权。

2:有电话,SD卡,拍照授权三个一起授权

案例代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1;private static final int MY_PERMISSIONS_REQUEST_CALL_CAMERA = 2;String[] permissions = new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE};// 声明一个集合,在后面的代码中用来存储用户拒绝授权的权List<String> mPermissionList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView(){findViewById(R.id.btn1).setOnClickListener(this);findViewById(R.id.btn2).setOnClickListener(this);findViewById(R.id.btn3).setOnClickListener(this);findViewById(R.id.btn4).setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btn1: //单个授权//检查版本是否大于M if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},MY_PERMISSIONS_REQUEST_CALL_PHONE);}else {showToast("权限已申请");}}break;case R.id.btn2://多个授权mPermissionList.clear();for (int i = 0; i < permissions.length; i++) {if (ContextCompat.checkSelfPermission(MainActivity.this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {mPermissionList.add(permissions[i]);}}if (mPermissionList.isEmpty()) {//未授予的权限为空,表示都授予了Toast.makeText(MainActivity.this,"已经授权",Toast.LENGTH_LONG).show();} else {//请求权限方法String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组ActivityCompat.requestPermissions(MainActivity.this, permissions, MY_PERMISSIONS_REQUEST_CALL_CAMERA);}break;case R.id.btn3:Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(camera, 1);break;case R.id.btn4:Intent intent = new Intent(Intent.ACTION_CALL);Uri data = Uri.parse("tel:" + "10086");intent.setData(data);startActivity(intent);break;}}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) {if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {showToast("权限已申请");} else {showToast("权限已拒绝");}}else if (requestCode == MY_PERMISSIONS_REQUEST_CALL_CAMERA){for (int i = 0; i < grantResults.length; i++) {if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {//判断是否勾选禁止后不再询问boolean showRequestPermission = ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permissions[i]);if (showRequestPermission) {showToast("权限未申请");}}}}super.onRequestPermissionsResult(requestCode, permissions, grantResults);}private void showToast(String string){Toast.makeText(MainActivity.this,string,Toast.LENGTH_LONG).show();}}

前提一定要注意:AndroidManifest中:

 <uses-permission android:name="android.permission.CALL_PHONE"/>  //电话<uses-permission android:name="android.permission.CAMERA"/>    //拍照<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>     //sd卡

此案例是自己全部用Java代码写的,项目危险权限少则推荐使用,多的话就自己封装或者借助第三方了。

权限申请有很多第三方封装好的库(工具类)可以实现,Github上一大把,后续博客将找几个好一点的来讲解一下。

案例点击下载

转载于:https://my.oschina.net/zhangqie/blog/1541599

Android6.0------权限申请管理(单个权限和多个权限申请)相关推荐

  1. Android6.0 蓝牙搜索不到设备原因,MIUI权限申请机制

    为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限. 蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进 ...

  2. adb root android 6,ADB获得ROOT权限的探究——基于Android6.0

    ADB概述 adb的全称是Android Debug Bridge,是对Android设备进行调试的工具.这是调试通信的方式是基于C/S构架.在Android设备,运行ADBD服务,等待Client端 ...

  3. 图纸管理软件_图纸文件管理操作繁琐?巧用“权限”,管理更高效

    企业内部的图纸文档使用.协作.流通需求频繁,管理要兼顾规范化.流程化.一体化,便利性,以推进企业办公效率的提升. 日常办公和图纸文档管理过程中,大家可能遇到过这样的问题:因业务需要,要借用多份分属于不 ...

  4. android6.0的坑

    虽然现在android已经出了7.0了.但是大部分人用的应该还是5.0和6.0的. 其中对于开发者来说,变化比较大的应该是6.0之前和6.0之后的版本. 因为以6.0为分界线多了一个比较坑的东西:权限 ...

  5. Vue 人资 实战篇八 权限设计 重点!!!路由访问权限,左侧导航栏显示等等,还有 mixin 混入方法

    1.0 权限设计-RBAC的权限设计思想 传统的权限设计是对每个人进行单独的权限设置,但这种方式已经不适合目前企业的高效管控权限的发展需求,因为每个人都要单独去设置权限 基于此,RBAC的权限模型就应 ...

  6. android 6.0权限封装,Android6.0------权限申请管理(单个权限和多个权限申请)

    Android开发时,到6.0系统上之后,有的权限就得申请才能用了. Android将权限分为正常权限 和 危险权限 Android系统权限分为几个保护级别.需要了解的两个最重要保护级别是 正常权限  ...

  7. Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题

    Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应 ...

  8. Android6.0动态权限申请及RxPermissions权限库使用

    一.AndroidManifest.xml 所有权限列表: 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据 ...

  9. Android教程 -05 Android6.0权限的管理

    视频为本篇博客知识的讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 height="498" width="510" src="http://pl ...

最新文章

  1. RxJava 过滤操作符 distinct 和 distinctUntilChanged
  2. python bs4 + requests4 简单爬虫
  3. vssver2.scc 文件是干啥的?
  4. 分布式存储(姚文辉)
  5. linux系统调试网络,linux系统命令(网络相关的调试命令)
  6. 从SVN资源库下载项目
  7. 多地GitHub账号使用受限;Python之父考虑重构解释器;62岁程序员埋逻辑炸弹 | 开发者周刊...
  8. 分享:将XML(VS提取注释时生成)转换为Chm的一个方法
  9. qunee for html5,Qunee for HTML5(一)
  10. PS实用小技巧--修改图片上的文字
  11. c语言boy,cboy
  12. 第12节 实例-挖方填方量的计算
  13. C语言全局变量限定范围,C语言范围规则
  14. 最小化最大链路利用率
  15. 十三款流行的无线网络黑客工具介绍
  16. 用群晖筑建音乐之「家」
  17. OpenGL像素绘制
  18. win7中USB音箱没有声音解决办法
  19. 数据结构 K - 团战可以输、提莫必须死
  20. 华为与WorldRemit达成协议:在非洲可以使用手机进行转账

热门文章

  1. ABAP程序相互调用--SUBMIT
  2. ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)
  3. 解决Windows7 Embedded连接手机问题
  4. POJ 2947 Widget Factory (高斯消元解同余方程组)
  5. 关于多人操作数据的处理策略
  6. PO BO VO DTO POJO DAO概念及其作用(附转换图)
  7. hdu4908 中位数子串
  8. 深入理解计算机系统 系统软件 硬件 文件 进程 虚拟内存
  9. 【音频处理】Polyphone 样本编辑 和 样本工具 ( 波形图 | 信息 | 频率分析 | 均衡器 | 播放器 | 终点裁剪 | 自动循环节 | 空白移除 | 音量 平衡 音调 调整 )
  10. 并发编程中的GIL锁(全局解释器锁)自己理解的他为啥存在