【Android】动态申请多个权限
下面这个方法根据自己需要申请的权限修改内容,之后调用getPermission()就行。
private static final String TAG = "MainActivity"; private final int ACCESS_LOCATION=1; /** * 获取权限,可以与其他项目的权限进行统一处理 */ private void getPermission() { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { int permissionCheck = 0; permissionCheck = this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION); //允许一个程序访问精良位置(如GPS) permissionCheck += this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION); //允许一个程序访问CellID或WiFi热点来获取粗略的位置 permissionCheck += this.checkSelfPermission(Manifest.permission.CAMERA); //请求访问使用照相设备 if (permissionCheck != PackageManager.PERMISSION_GRANTED) { //未获得权限 this.requestPermissions( // 请求授权 new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.CAMERA},ACCESS_LOCATION);// 自定义常量,任意整型 } } } /** * 请求权限的结果回调。每次调用 requestpermissions(string[],int)时都会调用此方法。 * @param requestCode 传入的请求代码 * @param permissions 传入permissions的要求 * @param grantResults 相应权限的授予结果:PERMISSION_GRANTED 或 PERMISSION_DENIED */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case ACCESS_LOCATION: if (hasAllPermissionGranted(grantResults)) { Log.i(TAG, "onRequestPermissionsResult: 用户允许权限"); } else { Log.i(TAG, "onRequestPermissionsResult: 拒绝搜索设备权限"); } break; } } private boolean hasAllPermissionGranted(int[] grantResults) { for (int grantResult : grantResults) { if (grantResult == PackageManager.PERMISSION_DENIED) { return false; } } return true; }
即使动态申请的权限也要在AndroidManifest.xml文件里配置
<!-- 请求访问使用照相设备-->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 允许一个程序访问精良位置(如GPS)-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 允许一个程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />