Android 6.0以上 需要运行时申请的权限(二)
2017-05-04 14:13
537 查看
一、 运行时权限分类
Android 6.0 以上的权限变成了运行时权限,在需要使用某个权限的时候必须动态去申请使用,直接访问直接导致app崩溃!权限分为一般权限和危险权限两种,一般权限跟以前一样在AndroidManifest声明,危险权限需要开发者在代码中手动的动态申请.
危险权限包含:传感器、日历、摄像头、通讯录、地理位置、麦克风、电话、短信、存储空间,具体见下图:
危险权限列表
除上面的危险权限之外的权限即为一般权限(普通权限)。
二、程序中申请权限
1.清单文件中配置相应权限
2.检测是否具有某些权限
onCreate方法中调用(调用处可随意)
3.没有相应权限要请求相应权限
4.请求权限后回调方法
结果
当然也可以自定义一个Activity然后封装 其他页面涉及到的继承此Activity即可 没必要在所有涉及到的Activity 申请 在回调方法中操作
Android 6.0 以上的权限变成了运行时权限,在需要使用某个权限的时候必须动态去申请使用,直接访问直接导致app崩溃!权限分为一般权限和危险权限两种,一般权限跟以前一样在AndroidManifest声明,危险权限需要开发者在代码中手动的动态申请.
危险权限包含:传感器、日历、摄像头、通讯录、地理位置、麦克风、电话、短信、存储空间,具体见下图:
危险权限列表
除上面的危险权限之外的权限即为一般权限(普通权限)。
二、程序中申请权限
1.清单文件中配置相应权限
<!-- 读联系人权限 --> <uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 写联系人权限 --> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <!-- 拨号权限 --> <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 读短信权限 --> <uses-permission android:name="android.permission.READ_SMS" /> <!-- 发短信权限 --> <uses-permission android:name="android.permission.SEND_SMS" /> <!-- 读手机状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
2.检测是否具有某些权限
/** * Android 6.0及以上 检测是否具有某些权限 * */ public boolean hasAndroidPermission(String permission){ if(ContextCompat.checkSelfPermission(MainActivity.this,permission)== PackageManager.PERMISSION_GRANTED){ return true; }else{ return false; } }
onCreate方法中调用(调用处可随意)
boolean has=hasAndroidPermission(SEND_SMS);
3.没有相应权限要请求相应权限
String [] strings=new String[]{SEND_SMS,CALL_PHONE,READ_CONTACTS}; requestAndroidPermission(0,strings);
/** * Android 6.0及以上 申请某些权限 * */ public void requestAndroidPermission(int code,String []permission){ ActivityCompat.requestPermissions(MainActivity.this,permission,code); }
4.请求权限后回调方法
/** * Android 6.0及以上 处理申请权限结果 * */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); Log.d("MainActivity","权限回调!requestCode----:"+requestCode); Log.d("MainActivity","权限回调!grantResults[0]----:"+grantResults[0]); Log.d("MainActivity","权限回调!grantResults[1]----:"+grantResults[1]); Log.d("MainActivity","权限回调!grantResults[2]----:"+grantResults[2]); Log.d("MainActivity","权限回调!PackageManager.PERMISSION_GRANTED----:"+PackageManager.PERMISSION_GRANTED); Log.d("MainActivity","权限回调!permissions[0]----:"+permissions[0]); Log.d("MainActivity","权限回调!permissions[1]----:"+permissions[1]); Log.d("MainActivity","权限回调!permissions[2]----:"+permissions[2]); switch(requestCode){ case 0: if(grantResults.length==3){ if(grantResults[0]==PackageManager.PERMISSION_GRANTED){//第一项被同意 Toast.makeText(MainActivity.this,"您赋予了第一项权限!",Toast.LENGTH_LONG).show(); }else{ Toast.makeText(MainActivity.this,"您拒绝了第一项权限!",Toast.LENGTH_LONG).show(); } if(grantResults[1]==PackageManager.PERMISSION_GRANTED){//第二项被同意 Toast.makeText(MainActivity.this,"您赋予了第二项权限!",Toast.LENGTH_LONG).show(); }else{ Toast.makeText(MainActivity.this,"您拒绝了第二项权限!",Toast.LENGTH_LONG).show(); } if(grantResults[2]==PackageManager.PERMISSION_GRANTED){//第三项被同意 Toast.makeText(MainActivity.this,"您赋予了第三项权限!",Toast.LENGTH_LONG).show(); }else{ Toast.makeText(MainActivity.this,"您拒绝了第三项权限!",Toast.LENGTH_LONG).show(); } } break; } }
结果
当然也可以自定义一个Activity然后封装 其他页面涉及到的继承此Activity即可 没必要在所有涉及到的Activity 申请 在回调方法中操作
相关文章推荐
- Android M 6.0以上 需要运行时申请的权限--easypermissions库
- Android 6.0以上 需要运行时申请的权限(一)
- android 6.0及以上 运行时权限申请(动态权限申请)
- Android 6.0 向用户申请权限,运行时权限
- Android 6.0 需要在运行时请求权限
- [置顶] Android 6.0(API 23)及其以上动态申请的权限与申请权限的方法
- Android 6.0及以上运行时权限处理完全解析
- android 6.0运行时新权限的申请(转载)
- Android 6.0及以上版本的运行时权限介绍
- Android 6.0 运行时权限申请
- 安卓学习笔记--- Android 6.0运行时权限的申请使用及EasyPermissions的使用
- android 6.0以后的运行时权限申请及封装 相关记录
- Android 6.0及以上版本的运行时权限介绍
- android 6.0 运行时权限申请流程
- Android学习_6.0以上系统的运行时权限
- Android运行时权限使用详解(适用于Android 6.0及以上)
- 【Android】6.0 运行时权限申请
- Android 6.0在运行时申请权限解释与实例
- Android 6.0的运行时权限 批量申请
- android 6.0 以上如何动态申请权限?