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处理的更多相关文章

  1. Android笔记——permission权限大全

    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permiss ...

  2. Android M Permission 运行时权限 学习笔记

    Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...

  3. android权限permission大全

    1.Android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写 ...

  4. Android 自定义 permission

    Android 自定义 permission Android 添加自定义权限 permission-tree 权限的根节点,3个成员都要定义 name 一般来说需要2个".":比如 ...

  5. android权限permission大全(权限提醒)

    1.Android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写 ...

  6. Android M Permission 学习笔记

    Android应用权限简要介绍 一个Android应用默认情况下是不拥有任何权限的, 这即是说, 在默认情况下, 一个应用是没有权利去进行一些可能会造成不好影响的操作的. 这些不好的影响可能是对其它应 ...

  7. Android常用Permission

    位置相关: android.permission.WRITE_GSERVICES 允许程序修改Google服务地图(Allows an application to modify the Google ...

  8. Android权限管理之Permission权限机制及使用

    前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...

  9. Android permission

    1. users-permission Users-permission is the permission that this app should acquire, so that the app ...

随机推荐

  1. MySQL BINARY和BIT类型

    BINARY和VARBINARY类型 BINARY和VARBIANRY类型同CHAR和VARCHAR类型相似,除了BIANARY和VARBINARY类型只包含二进制字符串,即它们只包含byte串而非字 ...

  2. ASP导出Word带页眉页脚,中文不乱码

    关键代码: <% Response.Clear() Response.CodePage= Response.Charset="UTF-8" Response.ContentT ...

  3. ArcGIS10的GDB文件解析(初步)

    早就应该写一写关于esri的一些改变 参考http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//006z000000tr00000 ...

  4. linux中crontab实现以秒执行任务

    用crontab+sleep实现以秒执行任务 crontab -e * * * * * /bin/date >>/tmp/date.txt * * * * * sleep 10s; /bi ...

  5. OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中

    OpenCV 2.2 以及后面的版本号取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序猿无法调用里面的显示函数来将图片显示到 MFC 的 Picture Co ...

  6. Web App 讲义教程

    http://www.csdn.net/tag/web%E5%BA%94%E7%94%A8

  7. 实现Android半透明Menu效果的开发实例

    不知道大家是否用过天天动听,对于它界面上的半透明Menu效果,笔者感觉非常漂亮.下面是天天动听半透明Menu的截图,欣赏下吧: 感觉还不错吧?那么如何实现这种半透明Menu效果呢?本文就重点讨论并给出 ...

  8. [Redux] Accessing Dispatch and State with Redux -- connect

    If you have props and actions, you want one component to access those props and actions, one solutio ...

  9. android应用程序ANR定义

    在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框.用户可以选择 ...

  10. online ddl 工具之pt-online-schema-change

      MySQL ddl 的问题现状 在运维mysql数据库时,我们总会对数据表进行ddl 变更,修改添加字段或者索引,对于mysql 而已,ddl 显然是一个令所有MySQL dba 诟病的一个功能, ...