动态权限申请封装在BaseActivity中
2018-01-02 17:18
369 查看
public class BaseActivity extends AppCompatActivity { private int mRequestCode = 12; private String mReason; private String mPermission; // 申请权限 protected void requestPermission(String permission, String reason) { mReason = reason; mPermission = permission; // 判断自身是否拥有此权限 if (PackageManager.PERMISSION_DENIED == checkSelfPermission(permission)) { // 如果没有,就去申请权限 requestPermissions(new String[]{permission}, mRequestCode); } else { // 如果有,则返回给子类调用 onPermissionResult(true); } } // 系统activity回调的权限申请结果 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == mRequestCode && grantResults[0] != PackageManager.PERMISSION_DENIED) { // 权限申请成功 onPermissionResult(true); } else { // 权限申请失败,判断是否需要弹窗解释原因 if (shouldShowRequestPermissionRationale(permissions[0])) { // 如果需要弹窗,则弹窗解释原因 showReasonDialog(); } else { // 否则,告诉子类权限申请失败 onPermissionResult(false); } } } // 展示给用户说明权限申请原因 private fun showReasonDialog() { AlertDialog.Builder(this) .setMessage(mReason) .setNegativeButton("取消", {dialog, which -> dialog.dismiss() onPermissionResult(false) }).setPositiveButton("确定", {dialog, which -> dialog.dismiss() requestPermissions(arrayOf < String > (mPermission), mRequestCode) }).create().show() } // 需要子类实现的权限申请结果,不写成接口是因为并不是所有的activity都需要申请权限 protected void onPermissionResult(boolean result) { } }
相关文章推荐
- Android 6.0 动态权限申请封装的处理方式
- 使用AOP封装的权限动态申请库PermissionLibrary,简化针对Android6.0之后实现权限动态申请的复杂性
- Adroid6.0 动态权限申请、封装 menglong0329
- BaseActivity中封装权限动态适配
- Android 6.0 动态权限申请注意事项
- Android6.0动态权限的封装
- Android 6.0+动态权限申请模板
- Android动态权限申请
- android6.0动态权限申请工具类
- Android 新安全机制之动态权限申请
- Android6.0动态权限申请步骤以及需要注意的一些坑
- Android API 23+ 动态权限申请
- Android避免动态申请权限
- Android6.0动态权限申请
- Android6.0动态权限申请步骤以及需要注意的一些坑
- Android 6.0 动态申请权限
- Android6.0动态权限申请步骤以及需要注意的一些坑
- Android动态申请权限
- Android6.0动态权限申请
- android 6.0权限申请封装