Android6.0以上系统获取权限
一、Android6.0以上系统都有那些权限需要动态获取
参考这个博客:http://blog.csdn.net/jianesrq0724/article/details/55211918
二、检查并获取
/** * 检查权限 */ public static void 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); } }
|
三、例子:百度地图定位获取权限
/** 需要请求的权限集合*/ 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.ACCESS_WIFI_STATE);//WIFI定位权限 mPermissionsList.add(Manifest.permission.ACCESS_NETWORK_STATE);//获取运营商信息 mPermissionsList.add(Manifest.permission.READ_PHONE_STATE);//手机状态权限 mPermissionsList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);//向扩展卡写入数据 ViewTools.checkPermission(this,mPermissionsList);//查看权限是否给够,不够请求权限 startLocate();
注:
1.这样,在获取权限对话框未消失之前,百度地图定位也继续在运行,只有获取权限对话框消失后,并且获取到了权限,百度地图定位才能获取到正确的位置信息
2.权限集合中不能有如下权限,否则显示权限未获取完全
mPermissionsList.add(Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);//向SD卡写入数据
|