Android M Permission处理
Android M(6.0)相比之前的版本,做了比较多的优化与改进。其中变化最大的一点是权限管理方面的改变,即不再是应用安装时授权,而改为运行时授权机制;一直以来,系统安全都是用户非常关心的问题,而之前的版本都是在安装应用时统一、强制的进行授权。一般用户在安装某个应用时,可能并不想授予应用某个权限,或是很容易忽略应用权限列表。致使很多应用肆意的申请权限,做一些不法的事情!这个问题在Android M将得到解决,它采用了运行时授权机制,在应用申请权限的时候提示用户,是否授权。提高用户对权限的认识!
对用户来说是非常有利的,但是对于开发者来说,则需要做更多的工作。
1.对于已经上线的应用
对于这类应用(targetSdkVersion < 23),Android M 系统做了兼容性处理。这类应用仍然按照之前的权限认证机制(用户在安装的时候不得不接受所有权限,安装后app就有了那些权限)工作。但是对于这类应用,用户仍然可以在设置中对应用的权限进行管理,可以取消授权。此时,当应用使用到用户取消的权限时,仍然不会出现异常,但是却不会执行相关操作,他将什么都不干,直接null或者0,这对于未做处理的程序来说,仍然会出现异常。只有祈求用户不随便取消权限和对新版本app中拥抱新的权限机制!
2.还未上线应用
随着Android M的发布,会陆续有很多的设备,使用新版本的系统。因此对我们来说拥抱新的权限机制是解决问题的最好办法!
(1)设置compileSdkVersion and targetSdkVersion为 23
android {
compileSdkVersion 23
...
defaultConfig {
targetSdkVersion 23
...
}
}
(2)同以前一样在AndroidManifest.xml添加声明权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
(3)权限检查,申请
/**
* 检查,申请权限
* */
private void addPremission() {
// 系统版本检查
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查权限
int permission = checkSelfPermission(Manifest.permission.WRITE_CONTACTS);
// 检查权限(兼容操作,可不判断系统版本)
// int permission = ActivityCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_CONTACTS);
if (permission != PackageManager.PERMISSION_GRANTED) {
// if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_CONTACTS)) {
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {
showMessageOKCancel("You need to allow access to Contacts",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS},
REQUEST_CODE_WRITE_CONTACTS_PERMISSIONS);
}
}
});
return;
}
// 申请权限
// ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_WRITE_CONTACTS_PERMISSIONS);
requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS}, REQUEST_CODE_WRITE_CONTACTS_PERMISSIONS);
return;
}
}
} /**
* 权限结果申请处理
* */
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_CODE_WRITE_CONTACTS_PERMISSIONS:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
adapter.setData(getLocalContactsInfos());
} else {
// Permission Denied
Toast.makeText(MainActivity.this, "WRITE_CONTACTS Denied", Toast.LENGTH_SHORT)
.show();
this.finish();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
(4)权限使用
检查有相关权限,或没权限申请到权限后才能执行具体操作,否则每次使用时,提醒用户授权!
Android M Permission处理的更多相关文章
- Android笔记——permission权限大全
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permiss ...
- Android M Permission 运行时权限 学习笔记
Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...
- android权限permission大全
1.Android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写 ...
- Android 自定义 permission
Android 自定义 permission Android 添加自定义权限 permission-tree 权限的根节点,3个成员都要定义 name 一般来说需要2个".":比如 ...
- android权限permission大全(权限提醒)
1.Android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写 ...
- Android M Permission 学习笔记
Android应用权限简要介绍 一个Android应用默认情况下是不拥有任何权限的, 这即是说, 在默认情况下, 一个应用是没有权利去进行一些可能会造成不好影响的操作的. 这些不好的影响可能是对其它应 ...
- Android常用Permission
位置相关: android.permission.WRITE_GSERVICES 允许程序修改Google服务地图(Allows an application to modify the Google ...
- Android权限管理之Permission权限机制及使用
前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...
- Android permission
1. users-permission Users-permission is the permission that this app should acquire, so that the app ...
随机推荐
- Oracle超出最大连接数问题及解决
用过Oracle的应该都熟悉如何查看和设置Oracle数据库的最大连接数.这里就再啰嗦一遍. 查看当前的连接数,可以用select count(*) from v$process;设置的最大连接数(默 ...
- 正则表达式从右往左进行匹配(Regex)
#匹配最末两位为数字 $x=New-Object regex ('\d{2}','RightToLeft') #$x.RightToLeft $x.Match('abcd22') 结果:
- 【Android应用开发】 OpenGL ES -- 透视投影 和 正交投影
博客地址 : http://blog.csdn.net/shulianghan/article/details/46680803 源代码下载 : http://download.csdn.net/de ...
- cocos2d-x 3.0环境搭建
原文来自于:http://blog.csdn.net/linzhengqun/article/details/21663341 安装工具 1. 配置JDK JDK下载地址:http://www.ora ...
- makefile中的patsubst
函数名称:加前缀函数—addprefix. 函数功能:为“NAMES…”中的每个文件名称加入前缀“PREFIX”.參数“NAMES…”是空格切割的文件名称序列,将“SUFFIX”加入到此序列的每个文件 ...
- php技术概要汇总
php搜索-> sphinx coreseek : 中文分词.中文搜索 samba :把linux服务器端目录映射的本地. 视频截图插件.音频视频转换(ffmpeg): 1)w ...
- php使用技巧--之链接地址
高效PHP程序必知的53个技巧 http://developer.51cto.com/art/201105/265953.htm 非常实用 十个PHP高级应用技巧 http://developer.5 ...
- 一般php创建的文件默认不是utf-8格式的,在网上搜罗的解决办法如下:
1.PHP本身是无编码的,所有的字符串通常都视为二进制流.因此只需要输入的字符串为Utf-8即可.若字符串采用其他编码,可以使用iconv系列函数转换编码. 2.注$content = iconv(& ...
- Skip list--reference wiki
In computer science, a skip list is a data structure that allows fast search within an ordered seque ...
- 本地计算机上的XXX服务启动后停止。某些服务在未由其它服务或程序使用时将自动停止。咋整?
用C#写个windows服务,安装部署后去启动时,提示说“本地计算机上的XXX服务启动后停止.某些服务在未由其它服务或程序使用时将自动停止”.咋整?就像下面酱紫: 度娘说不知道咋整,我想把程序附加到w ...