用EasyPermissions可以方便的请求多个权限.
最近项目中碰到的代码.贴在这里当个例子.
大神的解说:https://blog.csdn.net/hexingen/article/details/78504814
在build.gradle中添加依赖:
dependencies { compile 'pub.devrel:easypermissions:1.0.1' }
最开始还是在AndroidManifest.xml写进自己需要的权限:
在Activity中.
首先建一个String数组,把需要的权限都加进去:
private String[] mPerms = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.ACCESS_WIFI_STATE};
private static final int PERMISSIONS = 100; //请求码
请求权限:
//请求所需权限 @AfterPermissionGranted(PERMISSIONS) private void requestPermission() { if (EasyPermissions.hasPermissions(this, mPerms)) { //Log.d(TAG, "onClick: 获取读写内存权限,Camera权限和wifi权限"); } else { EasyPermissions.requestPermissions(this, "获取读写内存权限,Camera权限和wifi权限", PERMISSIONS, mPerms);
//
- 第一个参数:Context对象
- 第二个参数:权限弹窗上的文字提示语。告诉用户,这个权限用途。
- 第三个参数:这次请求权限的唯一标示,code。
- 第四个参数 : 一些系列的权限
}
}
在onResume()中调用requestPermission():
protected void onResume() { super.onResume(); requestPermission(); }
当请求成功是调用这个方法:
@Override public void onPermissionsGranted(int requestCode, @NonNull Listperms) { if (requestCode == PERMISSIONS) { Log.d(TAG, "onPermissionsGranted: 获取权限"); } }
请求被拒绝时调用这个方法:
@Override public void onPermissionsDenied(int requestCode, @NonNull Listperms) { Log.d(TAG, "onPermissionsDenied: 拒绝权限"); if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this) .setRationale("没有该权限,此应用程序可能无法正常工作。打开应用设置屏幕以修改应用权限") .setTitle("必需权限") .build() .show(); } }
权限结果是回调在onRequestPermissionsResult()方法中:
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); }