从Android6.0以后,Android是不会主动获取需要权限,改为了需要提示用户手动获取,系统应用除外。
1. 运行时获得权限:
从androi 6.0开始,不再是安装应用时用户确定获得全部的权限.而是在使用软件过程中需要该权限时,弹出对话框让用户选择权限.不仅如此,用户选择权限后还可以关闭。
2. 检查是否获得权限:
通过 ContextCompat.checkSelfPermission(context,permission)方法,方法返回值为 PackageManager.PERMISSION_GRANTED or PackageManager.PERMISSION_DENIED
int permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_CALENDAR);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(PermissionActivity.this, "hava this permission", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(PermissionActivity.this, "no this permission", Toast.LENGTH_SHORT).show();
}
3. 请求权限:
通过ActivityCompat.requestPermissions(activity,permissions,requestCode)第二个参数是一个String数组,第三个参数是请求码便于在onRequestPermissionsResult 方法中根据requestCode进行判断.
ActivityCompat.requestPermissions(PermissionActivity.this,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
4. 请求权限后的回调:
请求权限后会回调onRequestPermissionsResult方法,在activity中重写onRequestPermissionsResult(requestCode,permissions,grantResults)方法 grantResults是int类型的数组每个值为PackageManager.PERMISSION_GRANTED or PackageManager.PERMISSION_DENIED 分别对应permissions的每个请求。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
}
}
}
}
5、动态请求权限
//6.0之后要动态获取权限,重要!!!
protected void judgePermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查该权限是否已经获取
// 权限是否已经 授权 GRANTED---授权 DINIED---拒绝
// sd卡权限
String[] SdCardPermission = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (ContextCompat.checkSelfPermission(this, SdCardPermission[0]) != PackageManager.PERMISSION_GRANTED) {
// 如果没有授予该权限,就去提示用户请求
ActivityCompat.requestPermissions(this, SdCardPermission, 100);
}
//手机状态权限
String[] readPhoneStatePermission = {Manifest.permission.READ_PHONE_STATE};
if (ContextCompat.checkSelfPermission(this, readPhoneStatePermission[0]) != PackageManager.PERMISSION_GRANTED) {
// 如果没有授予该权限,就去提示用户请求
ActivityCompat.requestPermissions(this, readPhoneStatePermission, 200);
}
//定位权限
String[] locationPermission = {Manifest.permission.ACCESS_FINE_LOCATION};
if (ContextCompat.checkSelfPermission(this, locationPermission[0]) != PackageManager.PERMISSION_GRANTED) {
// 如果没有授予该权限,就去提示用户请求
ActivityCompat.requestPermissions(this, locationPermission, 300);
}
String[] ACCESS_COARSE_LOCATION = {Manifest.permission.ACCESS_COARSE_LOCATION};
if (ContextCompat.checkSelfPermission(this, ACCESS_COARSE_LOCATION[0]) != PackageManager.PERMISSION_GRANTED) {
// 如果没有授予该权限,就去提示用户请求
ActivityCompat.requestPermissions(this, ACCESS_COARSE_LOCATION, 400);
}
String[] READ_EXTERNAL_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE};
if (ContextCompat.checkSelfPermission(this, READ_EXTERNAL_STORAGE[0]) != PackageManager.PERMISSION_GRANTED) {
// 如果没有授予该权限,就去提示用户请求
ActivityCompat.requestPermissions(this, READ_EXTERNAL_STORAGE, 500);
}
String[] WRITE_EXTERNAL_STORAGE = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (ContextCompat.checkSelfPermission(this, WRITE_EXTERNAL_STORAGE[0]) != PackageManager.PERMISSION_GRANTED) {
// 如果没有授予该权限,就去提示用户请求
ActivityCompat.requestPermissions(this, WRITE_EXTERNAL_STORAGE, 600);
}
}else{
//doSdCardResult();
}
//LocationClient.reStart();
}
本文摘抄如下
1、android6.0运行时权限详解 [直通车]
2、Android动态获取权限(读写、获取手机状态、定位)[直通车]
历史上的今天
暂无评论...
随机推荐
钱钟书:论快乐
在旧书铺里买回来维尼(vigny)的《诗人日记》(journaldunpote),信手翻开,就看见有趣的一条。他说,在法语里,喜乐(bonheur)一个名词是“好”和“钟点”两字拼成,可见好事多磨,只是个把钟头的玩意儿。我们联想到我们本国话的说法,也同样的意味深长,譬如快活或快乐的快字,就把人生一切...
Android ListView子item高度定长固定值无效问题详解
前言最近做显示音乐列表信息时,发现ListView的Item布局中固定的高度失效了,怎么设置这个高度都失效。参考网用和自己折腾过程,记录一下,防止下次忘记。总结整理一下原因:1. LayoutInflater.inflate(int resource, ViewGroup root)...
Activity的Context介绍
前言对于Application,Activity和Service这几个类,我们是很[熟悉]的。确实[熟悉],作为App开发这基本都要面对这几个类。比较好奇的朋友会发现,他们都拥有Context,但他们的Context有似乎有一点点的不同。今天有空,根据网上大佬的步伐,在这里简单记录一下。正文...
朱自清:背影
那年冬天,祖母死了,父亲的差使也交卸了,正是祸不单行的日子。我从北京到徐州打算跟着父亲奔丧回家。到徐州见着父亲,看见满院狼藉的东西,又想起祖母,不禁簌簌地流下眼泪。父亲说:“事已如此,不必难过,好在天无绝人之路!”回家变卖典质,父亲还了亏空;又借钱办了丧事。这些日子,家中光景很是惨淡,一半为了丧事...
常用的简单monkey测试命令集合
前言Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。正文下面整理了一下黑名单和白名单...
List排序简单记录
前言简单整理一下List的集合的排序,简单的记录一下,方便自己后续查阅。正文这里介绍一下使用Comparable和Comparator进行排序Comparable在实现的FileInfo实现Comparable,然后实现排序compareTo()即可。具体如下public class ...