Android6.0以上系统获取权限

来源:互联网 发布:mac能玩什么网游 编辑:程序博客网 时间:2024/05/17 02:08

Android6.0以上系统获取权限

一、Android6.0以上系统都有那些权限需要动态获取

参考这个博客:http://blog.csdn.net/jianesrq0724/article/details/55211918

 

二、检查并获取

/**
 * 检查权限 */public static boolean checkPermission(final Activity activity, ArrayList<String> permissionsList) {    //判断手机是否是6.0以上    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {        for (int i = 0; i < permissionsList.size(); i++) {            if (ContextCompat.checkSelfPermission(activity, permissionsList.get(i)) == PackageManager.PERMISSION_GRANTED) {                permissionsList.remove(i);                i--;            }        }    }    if (permissionsList.size() > 0) {//有权限没有给,返回false        ActivityCompat.requestPermissions(activity,permissionsList.toArray(new String[permissionsList.size()]),1);        return false;    }    return true;}

三、例子:百度地图定位获取权限

/** 需要请求的权限集合*/private ArrayList<String> mPermissionsList;

 

mPermissionsList = new ArrayList<>();
//这两个属于一类权限,一类权限只显示一个获取对话框mPermissionsList.add(Manifest.permission.ACCESS_COARSE_LOCATION);//网络定位权限mPermissionsList.add(Manifest.permission.ACCESS_FINE_LOCATION);//GPS定位权限mPermissionsList.add(Manifest.permission.READ_PHONE_STATE);//手机状态权限mPermissionsList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);//向扩展卡写入数据
if (ViewTools.checkPermission(this,mPermissionsList)) {    startLocate();}

@Overridepublic void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {    switch (requestCode) {        case 1: {            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                startLocate();            } else {                Toast.makeText(this,"定位权限拒绝",Toast.LENGTH_SHORT).show();            }            return;        }    }}

注:

1.这样,在获取权限对话框未消失之前,百度地图定位也继续在运行,只有获取权限对话框消失后,并且获取到了权限,百度地图定位才能获取到正确的位置信息

2.权限集合中不能有如下权限,否则显示权限未获取完全

mPermissionsList.add(Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);//向SD卡写入数据

 

原创粉丝点击