android权限申请
2017-11-07 00:00
567 查看
摘要: 个人笔记仅供参考
我主要是给自己做下笔记,方便下次使用
我把权限的管理封装在了BaseActivity,下面我就主要贴代码
在其它子类activity中的使用,这里拿申请sd卡权限举例
还有一些相机权限适配等,有时间了再写
我主要是给自己做下笔记,方便下次使用
我把权限的管理封装在了BaseActivity,下面我就主要贴代码
private int REQUEST_CODE_PERMISSION; /** * 请求权限 * @param permissions 请求的权限 * @param requestCode 请求权限的请求码 */ public void requestPermission(String[] permissions, int requestCode) { REQUEST_CODE_PERMISSION = requestCode; if (checkPermissions(permissions)) { permissionSuccess(REQUEST_CODE_PERMISSION); } else {//如果权限没有授权,就弹窗询问用户 List<String> needPermissions = getDeniedPermissions(permissions); ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[needPermissions.size()]), REQUEST_CODE_PERMISSION); } } /** * 检测所请求的权限是否都已授权 * * @param permissions * @return */ private boolean checkPermissions(String[] permissions) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { return true; } for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } /** * 获取权限集中需要申请权限的列表 * * @param permissions * @return */ private List<String> getDeniedPermissions(String[] permissions) { List<String> needRequestPermissionList = new ArrayList<>(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED || ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) { needRequestPermissionList.add(permission); } } return needRequestPermissionList; } /** * 系统请求权限回调,点击允许拒绝后的回调 * * @param requestCode * @param permissions * @param grantResults */ // @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CODE_PERMISSION) { if (verifyPermissions(grantResults)) {//获取权限成功 permissionSuccess(REQUEST_CODE_PERMISSION); } else {//获取权限失败 permissionFail(REQUEST_CODE_PERMISSION); } } } /** * 确认所有的权限是否都已授权 * * @param grantResults * @return */ private boolean verifyPermissions(int[] grantResults) { for (int grantResult : grantResults) { if (grantResult != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } /** * 获取权限成功 * @param requestCode */ public void permissionSuccess(int requestCode) { } /** * 获取权限失败 * @param requestCode */ public void permissionFail(int requestCode) { }
在其它子类activity中的使用,这里拿申请sd卡权限举例
private String[] needPermissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestPermission(needPermissions,0x0001); }
@Override public void permissionFail(int requestCode) { super.permissionFail(requestCode); switch (requestCode) { case 0x0001: Toast.makeText(this, "请开启读写sd卡权限", Toast.LENGTH_SHORT).show(); break; } } @Override public void permissionSuccess(int requestCode) { super.permissionSuccess(requestCode); switch (requestCode) { case 0x0001: //do();做自己想做的工作 break; } }
还有一些相机权限适配等,有时间了再写
相关文章推荐
- android程序可以向系统申请的权限一览表
- Android 6.0 权限申请
- Android 新版本(包括23别的不知道)权限申请示例
- Android的权限动态申请需要注意的地方
- Android 6.0 动态申请权限
- Android动态权限申请
- 【举例】Android动态申请权限
- Android之6.0 权限申请封装
- Android 6.0权限动态申请
- Android 6.0 动态权限申请
- Android 6.0 动态权限申请
- Android应用申请运行时权限(Permission)
- android ---批量申请权限
- Android EasyPermission优雅地实现动态权限申请
- Android RuntimePermissions运行时权限:单个运行时权限申请简例
- Android 6.0 动态权限申请(权限分组)
- Android开发——动态申请权限
- API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全。
- Android 6.0动态申请权限
- Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法