以获得地理位置权限为例
1.添加需要权限
//当Android6.0系统以上时,动态获取权限 private static final String[] PERMISSIONS = new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.INTERNET};
2.添加标志
private boolean permissionGranted = true; //权限的标志 private static final int PERMISSION_CODES = 1001;
3.判断当前版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermission(); }
4.手动申请
/** * 动态的进行权限请求 */ @TargetApi(Build.VERSION_CODES.M) private void requestPermission() { List<String> p = new ArrayList<>(); for (String permission : PERMISSIONS) { if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED) { p.add(permission); } } if (p.size() > 0) { requestPermissions(p.toArray(new String[p.size()]), PERMISSION_CODES); } }
5.申请回调
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case PERMISSION_CODES: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) { permissionGranted = false; } else { permissionGranted = true; } break; } }