Android6.0运行时权限
来源:互联网 发布:兵器科学与技术 知乎 编辑:程序博客网 时间:2024/06/02 06:22
Android 6.0 采用新的权限模型,只有在需要权限的时候,才告知用户是否授权;是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权限申请。
判断是否是需要运行时权限的标记就是targetSDKVersion。
当targetSDKVersion<23的时候,仅在安装时赋予权限,使用时将不被提醒;
当targetSDKVersion≥23的时候才会使用新的运行时权限规则。
运行时权限未适配可能会导致应用崩溃或者在SD卡中创建目录和文件不成功。
权限的分组
Android中有很多权限,但并非所有的权限都是敏感权限,于是6.0系统就对权限进行了分类,一般为下述几类
正常(Normal Protection)权限
危险(Dangerous)权限
特殊(Particular)权限
其他权限(一般很少用到)
正常权限
正常权限具有如下的几个特点:
对用户隐私没有较大影响或者不会带来安全问题。
安装后就赋予这些权限,不需要显示提醒用户,用户也不能取消这些权限。
上述的权限基本设计的是关于网络,蓝牙,时区,快捷方式等方面,只要在AndroidManifest.xml指定了这些权限,就会被授予,并且不能撤销。
注意:直接在AndroidManifest.xml文件中声明权限即可。
特殊权限
这里讲特殊权限提前讲一下,因为这个相对来说简单一些。
特殊权限,顾名思义,就是一些特别敏感的权限,在Android系统中,主要由两个
SYSTEM_ALERT_WINDOW(设置悬浮窗,进行一些黑科技)
WRITE_SETTINGS (修改系统设置)
关于上面两个特殊权限的授权,做法是使用startActivityForResult启动授权界面来完成。
注意:关于这两个特殊权限,一般不建议应用申请。
危险权限
危险权限实际上才是运行时权限主要处理的对象,这些权限可能引起隐私问题或者影响其他程序运行。
Android中的危险权限可以归为以下几个分组:
权限组
权限列表
android.permission-group.CALENDAR
android.permission.READ_CALENDAR(允许程序读取用户的日程信息)
android.permission-group.CAMERA
android.permission.CAMERA(允许访问摄像头进行拍照)
android.permission-group.CONTACTS
android.permission.READ_CONTACTS(允许应用访问联系人通讯录信息)
android.permission.WRITE_CONTACTS(写入联系人,但不可读取)
android.permission.GET_ACCOUNTS(访问GMail账户列表)
android.permission-group.LOCATION
android.permission.ACCESS_COARSE_LOCATION(通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米)
android.permission.ACCESS_FINE_LOCATION(通过GPS芯片接收卫星的定位信息,定位精度达10米以内)
android.permission-group.MICROPHONE
android.permission.RECORD_AUDIO(录制声音通过手机或耳机的麦克)
android.permission-group.PHONE
android.permission.READ_PHONE_STATE(访问电话状态)
android.permission.CALL_PHONE(允许程序从非系统拨号器里输入电话号码)
android.permission.READ_CALL_LOG(允许应用程序读取用户的通话记录)
android.permission.WRITE_CALL_LOG(允许一个程序写入(但不读取)用户的通话记录资料)
com.android.voicemail.permission.ADD_VOICEMAIL(允许应用程序添加语音邮件进入系统)
android.permission.USE_SIP(允许程序使用SIP视频服务)
android.permission.PROCESS_OUTGOING_CALLS(允许程序监视,修改或放弃播出电话)
android.permission-group.SENSORS
android.permission.BODY_SENSORS(允许从传感器,用户使用来衡量什么是他/她的身体内发生的事情,如心脏速率访问数据的应用程序)
android.permission-group.SMS
android.permission.SEND_SMS(发送短信)
android.permission.RECEIVE_SMS(接收短信)
android.permission.READ_SMS(读取短信内容)
android.permission.RECEIVE_WAP_PUSH(接收WAP PUSH信息)
android.permission.RECEIVE_MMS(接收彩信)
android.permission.READ_CELL_BROADCASTS()
android.permission-group.STORAGE
android.permission.READ_EXTERNAL_STORAGE(允许程序读取外部存储,如SD卡读文件)
判断是否是需要运行时权限的标记就是targetSDKVersion。
当targetSDKVersion<23的时候,仅在安装时赋予权限,使用时将不被提醒;
当targetSDKVersion≥23的时候才会使用新的运行时权限规则。
运行时权限未适配可能会导致应用崩溃或者在SD卡中创建目录和文件不成功。
权限的分组
Android中有很多权限,但并非所有的权限都是敏感权限,于是6.0系统就对权限进行了分类,一般为下述几类
正常(Normal Protection)权限
危险(Dangerous)权限
特殊(Particular)权限
其他权限(一般很少用到)
正常权限
正常权限具有如下的几个特点:
对用户隐私没有较大影响或者不会带来安全问题。
安装后就赋予这些权限,不需要显示提醒用户,用户也不能取消这些权限。
上述的权限基本设计的是关于网络,蓝牙,时区,快捷方式等方面,只要在AndroidManifest.xml指定了这些权限,就会被授予,并且不能撤销。
注意:直接在AndroidManifest.xml文件中声明权限即可。
特殊权限
这里讲特殊权限提前讲一下,因为这个相对来说简单一些。
特殊权限,顾名思义,就是一些特别敏感的权限,在Android系统中,主要由两个
SYSTEM_ALERT_WINDOW(设置悬浮窗,进行一些黑科技)
WRITE_SETTINGS (修改系统设置)
关于上面两个特殊权限的授权,做法是使用startActivityForResult启动授权界面来完成。
注意:关于这两个特殊权限,一般不建议应用申请。
危险权限
危险权限实际上才是运行时权限主要处理的对象,这些权限可能引起隐私问题或者影响其他程序运行。
Android中的危险权限可以归为以下几个分组:
权限组
权限列表
android.permission-group.CALENDAR
android.permission.READ_CALENDAR(允许程序读取用户的日程信息)
android.permission-group.CAMERA
android.permission.CAMERA(允许访问摄像头进行拍照)
android.permission-group.CONTACTS
android.permission.READ_CONTACTS(允许应用访问联系人通讯录信息)
android.permission.WRITE_CONTACTS(写入联系人,但不可读取)
android.permission.GET_ACCOUNTS(访问GMail账户列表)
android.permission-group.LOCATION
android.permission.ACCESS_COARSE_LOCATION(通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米)
android.permission.ACCESS_FINE_LOCATION(通过GPS芯片接收卫星的定位信息,定位精度达10米以内)
android.permission-group.MICROPHONE
android.permission.RECORD_AUDIO(录制声音通过手机或耳机的麦克)
android.permission-group.PHONE
android.permission.READ_PHONE_STATE(访问电话状态)
android.permission.CALL_PHONE(允许程序从非系统拨号器里输入电话号码)
android.permission.READ_CALL_LOG(允许应用程序读取用户的通话记录)
android.permission.WRITE_CALL_LOG(允许一个程序写入(但不读取)用户的通话记录资料)
com.android.voicemail.permission.ADD_VOICEMAIL(允许应用程序添加语音邮件进入系统)
android.permission.USE_SIP(允许程序使用SIP视频服务)
android.permission.PROCESS_OUTGOING_CALLS(允许程序监视,修改或放弃播出电话)
android.permission-group.SENSORS
android.permission.BODY_SENSORS(允许从传感器,用户使用来衡量什么是他/她的身体内发生的事情,如心脏速率访问数据的应用程序)
android.permission-group.SMS
android.permission.SEND_SMS(发送短信)
android.permission.RECEIVE_SMS(接收短信)
android.permission.READ_SMS(读取短信内容)
android.permission.RECEIVE_WAP_PUSH(接收WAP PUSH信息)
android.permission.RECEIVE_MMS(接收彩信)
android.permission.READ_CELL_BROADCASTS()
android.permission-group.STORAGE
android.permission.READ_EXTERNAL_STORAGE(允许程序读取外部存储,如SD卡读文件)
android.permission.WRITE_EXTERNAL_STORAGE(允许程序写入外部存储,如SD卡上写文件)
对于危险权限需要我们在代码中动态的去申请
单个权限的申请:
protected boolean isPermissionGranted(String permissionName, int questCode) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {return true;}// 判断是否需要请求允许权限int hasPermision = checkSelfPermission(permissionName);if (hasPermision != PackageManager.PERMISSION_GRANTED) {requestPermissions(new String[] { permissionName }, questCode);return false;}return true;}多个权限申请:
protected boolean isPermissionsAllGranted(String[] permArray, int questCode) {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {return true;}// 获得批量请求但被禁止的权限列表List<String> deniedPerms = new ArrayList<String>();for (int i = 0; permArray != null && i < permArray.length; i++) {if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(permArray[i])) {deniedPerms.add(permArray[i]);}}// 进行批量请求int denyPermNum = deniedPerms.size();if (denyPermNum != 0) {requestPermissions(deniedPerms.toArray(new String[denyPermNum]), questCode);return false;}return true;}相应的权限请求界面:
@Overridepublic void onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == VariableTools.QUEST_CODE_CALL_FILE_R_W) {//questCodeif (grantResults[0] != PackageManager.PERMISSION_GRANTED) {popAlterDialog("权限被禁止功能无法正常使用,是否开启该权限");//此处弹出啊Dialog去设置权限} else {ToastUtil.toastShowShort("授权成功");//do something}}}
public void popAlterDialog(String msgInfo) {AlertDialog.Builder builder = new AlertDialog.Builder(context); View view = LayoutInflater.from(context).inflate(R.layout.dialog_common, null); TextView mTitleDialog = (TextView) view.findViewById(R.id.tv_dialog_title); TextView mMessageDialog = (TextView) view.findViewById(R.id.tv_dialog_message); mTitleDialog.setText("权限警告"); mMessageDialog.setText(msgInfo); builder.setView(view);builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {@SuppressLint("InlinedApi")@Overridepublic void onClick(DialogInterface arg0, int arg1) {// 前往应用详情界面try {Uri packUri = Uri.parse("package:" + getPackageName());Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packUri);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);BaseActivity.this.startActivity(intent);} catch (Exception e) {ToastUtil.toastShowShort(getString(R.string.dialog_permission_error_skip));}}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});builder.show();}
阅读全文
0 0
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限
- 【Android6.0】运行时权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限
- Android6.0运行时权限
- Android6.0---运行时权限
- Android6.0运行时权限
- Android6.0运行时权限
- android6.0运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限。
- Android6.0运行时权限
- Android6.0运行时权限
- Android6.0运行时权限
- 处理undo回滚段问题
- 2017-10-10离线赛
- 防js代码注入
- java实现定时任务的三种方法
- jdk和cglib动态代理
- Android6.0运行时权限
- hihocoder #1015 : KMP算法 Java实现
- QT输出调试信息
- Android常用命令2
- 链接中的参数有+带不过去问题
- 有关toggleClass 与siblings的用法
- extjs 动态表头(亲测)
- 第三方网站接入微信JS-SDK的分享自定义设置,微信分享小图标以及标题
- linux下测试磁盘的读写IO速度