Android 6.0权限的封装(一篇就够)
来源:互联网 发布:苹果5s怎么用4g网络 编辑:程序博客网 时间:2024/06/04 00:20
关于android 6.0权限封装的例子网上一堆,考虑到实际运用和用户体验,我还是亲自对权限进行了封装,个人认为更符合APP的操作习惯和体验性。
1、首先直接来看看权限的请求操作吧,例如,请求一个读取联系人权限Manifest.permission.READ_PHONE_STATE。
//实例化一个PermissionManager类对象private PermissionManager permissionManager = new PermissionManager(this);//请求权限的方法private void checkPermission() { permissionManager.addPermission(new Permission() { @Override public String getPermission() { //返回需要申请得权限 return Manifest.permission.READ_PHONE_STATE; } //权限申请的结果回调 @Override public void onApplyResult(boolean succeed) { if (succeed) { //请求成功操作 } else { //请求失败操作 } } }).apply(this);//传入Activity或者Fragment实例对象 } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); //在权限回调里面调用permissionManager的onPermissionsResult()方法。 permissionManager.onPermissionsResult(requestCode, permissions, grantResults); }
一看,是不是很简单,很实用,及时申请权限,及时处理。那有人说,申请多个权限怎么办?别急,申请多个权限直接代用permissionManager.addPermission(new Permission());迭代添加就行。例如:
permissionManager .addPermission(new Permission() { @Override public String getPermission() { return Manifest.permission.READ_EXTERNAL_STORAGE; } @Override public void onApplyResult(boolean succeed) { //根据succeed的返回值来判断权限有无来进行操作 } } }) .addPermission(new Permission() { @Override public String getPermission() { return Manifest.permission.READ_PHONE_STATE; } @Override public void onApplyResult(boolean succeed) { //根据succeed的返回值来判断权限有无来进行操作 } } }).apply(this);
是不是还是很简单,看着很舒服。其实封装的操作很简单,只需简单的几步就可以完成。
2、首先创建一个“权限”接口,代表一个权限。
public interface Permission { /** * 请求的权限 * * @return 请求的权限 */ String getPermission(); /** * 请不权限返回的结果 * * @param succeed 允许开启权限则返回true */ void onApplyResult(boolean succeed);}
3、创建一个权限管理类,对权限进行管理和申请操作。
public class PermissionManager { private static final int CODE = 601; private List<Permission> mPermissionList; private List<Permission> mNeedPermissionList; private Activity mActivity; private Fragment mFragment; /** * 在Activity里面申请权限 * * @param activity 该Activity的实例对象 */ public PermissionManager(Activity activity) { this.mActivity = activity; mPermissionList = new ArrayList<>(); mNeedPermissionList = new ArrayList<>(); } /** * 在Fragment里面申请权限 * * @param fragment 该Fragment的实例对象 */ public PermissionManager(Fragment fragment) { this.mFragment = fragment; mPermissionList = new ArrayList<>(); mNeedPermissionList = new ArrayList<>(); } public PermissionManager addPermission(Permission permission) { mPermissionList.add(permission); return this; } public void apply(@NonNull Context context) { for (int i = 0; i < mPermissionList.size(); i++) { Permission permission = mPermissionList.get(i); if (ContextCompat.checkSelfPermission(context, permission.getPermission()) != PackageManager.PERMISSION_GRANTED) { mNeedPermissionList.add(permission); } else { permission.onApplyResult(true); } } if (mNeedPermissionList.size() == 0) { return; } String[] permission = new String[mNeedPermissionList.size()]; for (int j = 0; j < mNeedPermissionList.size(); j++) { permission[j] = mNeedPermissionList.get(j).getPermission(); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (mActivity != null) { mActivity.requestPermissions(permission, CODE); } else { mFragment.requestPermissions(permission, CODE); } } if (null != mPermissionList) { mPermissionList.clear(); } } /** * 该方法必须在Activity或者Fragment的onRequestPermissionsResult() 调用,否则没有回调事件 * * @param requestCode 请求码 * @param permissions 请求的权限 * @param grantResults 是否成功的标记 */ public void onPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == CODE) { for (int i = 0; i < mNeedPermissionList.size(); i++) { if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { mNeedPermissionList.get(i).onApplyResult(true); } else { mNeedPermissionList.get(i).onApplyResult(false); } } } } public static boolean checkPermission(Context context, String permission) { return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; }}
以上就是我对权限的一个简单封装,若有疑问和建议还希望留言指正,谢谢!
阅读全文
1 0
- Android 6.0权限的封装(一篇就够)
- Android动画,一篇就够
- View的滑动,一篇就够了
- Android框架之路——Json解析一篇就够(原生技术+Gson+FastJson)
- Android:学习AIDL,这一篇文章就够了(上)
- Android:学习AIDL,这一篇文章就够了(上)
- Android:学习AIDL,这一篇文章就够了(下)
- Android:学习AIDL,这一篇文章就够了(上)
- Android:学习AIDL,这一篇文章就够了(上)
- Android:学习AIDL,这一篇文章就够了(下)
- Android:学习AIDL,这一篇文章就够了(下)
- Android aidl 看这一篇就够了
- Android:学习AIDL,这一篇文章就够了(上)
- Android:学习AIDL,这一篇文章就够了(下)
- Android Gradle 看这一篇就够了
- Android:学习AIDL,这一篇文章就够了(上)
- Android:学习AIDL,这一篇文章就够了(上)
- Android:学习AIDL,这一篇文章就够了(下)
- HTML学习---------1.12 水平分割线标签 <hr>
- 2017云计算与物联网技术大会第二届7月苏州召开!
- java之yield(),sleep(),wait()区别详解-备忘笔记
- 909422229_kotlin第一节:安装配置测试
- 快速排序算法及比较
- Android 6.0权限的封装(一篇就够)
- Android-SurfaceView与SurfaceHolder对象
- 疯狂的ajazz
- java读取DNS中的各种解析记录
- Otto使用入门
- ECharts异步获取数据
- 新闻客户端
- sass、less和stylus的安装使用和入门实践
- 多专家模型(mixture of experts)