Android 6.0 的权限管理自己简单的封装--(到BaseActivity)
2017-11-02 16:57
459 查看
一 。直接上代码 daima 里面 也有注释
1 先写一个我们需要的工具类
public class PermissionUtil {
//检查权限时,判断系统的权限集合
public static boolean permissionSet(Context context,String… permissions) {
for (String permission : permissions) {
if (isLackPermission(context,permission)) {//是否添加完全部权限集合
return true;
}
}
return false;
}
}
2 .写我们的BaseActivity
public abstract class BaseActivity extends AppCompatActivity{
//首先声明权限授权
public static final int PERMISSION_DENIEG = 1;//权限不足,权限被拒绝的时候
public int PERMISSION_REQUEST_CODE = 2;//系统授权管理页面时的结果参数
public static final String PACKAGE_URL_SCHEME = “package:”;//权限方案
// public CheckPermission checkPermission;//检测权限类的权限检测器
private boolean isrequestCheck = true;//判断是否需要系统权限检测。防止和系统提示框重叠
private AlertDialog.Builder builder;
private AlertDialog buidleDia;
/* *////
* 用于权限管理
* 如果全部授权的话,则直接通过进入
* 如果权限拒绝,缺失权限时,则使用dialog提示
*
*/////
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (PERMISSION_REQUEST_CODE == requestCode && hasAllPermissionGranted(grantResults)) //判断请求码与请求结果是否一致
{
isrequestCheck = true;//需要检测权限,直接进入,否则提示对话框进行设置
getAllGrantedPermission();
} else if (PERMISSION_REQUEST_CODE == requestCode){
//提示对话框设置
isrequestCheck = false;
showMissingPermissionDialog();//dialog
notGetAllGrantedPermission();
}
}
/* ////没有获取到权限调用的////*/
public void notGetAllGrantedPermission() {
/* //*//*
* 当获取到所需权限后,进行相关业务操作
*/////
public void getAllGrantedPermission() {
/* ////有需要就重写 没有就不必要了////*/
public String[] getPermissions() {
return null;
}
/* //*//* //根据activity生命周期,onRestart()->onResume()*/
//此处表示从系统设置页面返回后,检查用户是否将所需的权限打开
if (!isrequestCheck) {
if (getPermissions() != null) {
if (PermissionUtil.permissionSet(this,getPermissions())) {
showMissingPermissionDialog();//dialog
} else {
//获取全部权限,走正常业务
getAllGrantedPermission();
}
}
} else {
isrequestCheck = true;
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//开启沉浸式状态栏
if (isOpenStatus()) {
Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);//设置主窗体全屏
window.setStatusBarColor(Color.TRANSPARENT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
二 。一般的在Activity里面的应用 ,直接重写父类的一些方法 就好了 其中有 个process1() 方法用于在你不想一开始在OnCreate里面 就申请权限用的 一开始 在 getPermission里面直接返null就可以 在需要申请的时候直接 返回需要的申请的权限就可以了 然后 调用上面的process1()的方法就好了。
三。 在其他类里面调用 可以直接 通过接口来回调 就可以 直接在Actiity里面 直接通过setListener方式来 就可以 (这里我一开始在Fragment里面 申请权限 我刚开始傻乎乎的还在BaseFragment里面也写了一套这个 醉了 当时感冒吃了感冒药 晕头了 )。
1 先写一个我们需要的工具类
public class PermissionUtil {
//检查权限时,判断系统的权限集合
public static boolean permissionSet(Context context,String… permissions) {
for (String permission : permissions) {
if (isLackPermission(context,permission)) {//是否添加完全部权限集合
return true;
}
}
return false;
}
//检查系统权限是,判断当前是否缺少权限(PERMISSION_DENIED:权限是否足够) private static boolean isLackPermission(Context context,String permission) { return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED; }
}
2 .写我们的BaseActivity
public abstract class BaseActivity extends AppCompatActivity{
//首先声明权限授权
public static final int PERMISSION_DENIEG = 1;//权限不足,权限被拒绝的时候
public int PERMISSION_REQUEST_CODE = 2;//系统授权管理页面时的结果参数
public static final String PACKAGE_URL_SCHEME = “package:”;//权限方案
// public CheckPermission checkPermission;//检测权限类的权限检测器
private boolean isrequestCheck = true;//判断是否需要系统权限检测。防止和系统提示框重叠
private AlertDialog.Builder builder;
private AlertDialog buidleDia;
public void setPERMISSION_REQUEST_CODE(int code){ this.PERMISSION_REQUEST_CODE=code; } //显示对话框提示用户缺少权限 public void showMissingPermissionDialog() { if (builder==null) { builder = new AlertDialog.Builder(this); builder.setTitle(R.string.help);//提示帮助 builder.setMessage(R.string.string_help_text); //如果是拒绝授权,则退出应用 //退出 builder.setNegativeButton(R.string.quit, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }); //打开设置,让用户选择打开权限 builder.setPositiveButton(R.string.settings, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); startAppSettings();//打开设置 } }); builder.setCancelable(false); } //用来防止多次显示我们的窗口 if (buidleDia!=null) { buidleDia.dismiss(); } buidleDia = builder.show(); } //获取全部权限 public boolean hasAllPermissionGranted(int[] grantResults) { for (int grantResult : grantResults) { if (grantResult == PackageManager.PERMISSION_DENIED) { return false; } } return true; } //打开系统应用设置(ACTION_APPLICATION_DETAILS_SETTINGS:系统设置权限) public void startAppSettings() { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse(PACKAGE_URL_SCHEME + getPackageName())); startActivity(intent); } //请求权限去兼容版本 public void requestPermissions(String... permission) { ActivityCompat.requestPermissions(this, permission, PERMISSION_REQUEST_CODE); }
/* *////
* 用于权限管理
* 如果全部授权的话,则直接通过进入
* 如果权限拒绝,缺失权限时,则使用dialog提示
*
*/////
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (PERMISSION_REQUEST_CODE == requestCode && hasAllPermissionGranted(grantResults)) //判断请求码与请求结果是否一致
{
isrequestCheck = true;//需要检测权限,直接进入,否则提示对话框进行设置
getAllGrantedPermission();
} else if (PERMISSION_REQUEST_CODE == requestCode){
//提示对话框设置
isrequestCheck = false;
showMissingPermissionDialog();//dialog
notGetAllGrantedPermission();
}
}
/* ////没有获取到权限调用的////*/
public void notGetAllGrantedPermission() {
}
/* //*//*
* 当获取到所需权限后,进行相关业务操作
*/////
public void getAllGrantedPermission() {
}
protected void process(Bundle savedInstanceState) {
if (getPermissions() != null) {
if (PermissionUtil.permissionSet(this,getPermissions())) {
requestPermissions(getPermissions()); //去请求权限
} else {
getAllGrantedPermission();
}}}/*用于在外部的请求权限用的*/
public void process1() {
if (getPermissions() != null) {
if (PermissionUtil.permissionSet(this,getPermissions())) {
requestPermissions(getPermissions()); //去请求权限
} else {
getAllGrantedPermission();
}}}
/* ////有需要就重写 没有就不必要了////*/
public String[] getPermissions() {
return null;
}
@Override protected void onResume() { super.onResume();
/* //*//* //根据activity生命周期,onRestart()->onResume()*/
//此处表示从系统设置页面返回后,检查用户是否将所需的权限打开
if (!isrequestCheck) {
if (getPermissions() != null) {
if (PermissionUtil.permissionSet(this,getPermissions())) {
showMissingPermissionDialog();//dialog
} else {
//获取全部权限,走正常业务
getAllGrantedPermission();
}
}
} else {
isrequestCheck = true;
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//开启沉浸式状态栏
if (isOpenStatus()) {
Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);//设置主窗体全屏
window.setStatusBarColor(Color.TRANSPARENT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}setContentView(getContentId());
/* ButterKnife.bind(this);*/
loadData();
initView();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
process(savedInstanceState);
}bindListener();
}
protected void loadData() {
}
protected void bindListener() {
}
protected void initView() {
}
}
二 。一般的在Activity里面的应用 ,直接重写父类的一些方法 就好了 其中有 个process1() 方法用于在你不想一开始在OnCreate里面 就申请权限用的 一开始 在 getPermission里面直接返null就可以 在需要申请的时候直接 返回需要的申请的权限就可以了 然后 调用上面的process1()的方法就好了。
三。 在其他类里面调用 可以直接 通过接口来回调 就可以 直接在Actiity里面 直接通过setListener方式来 就可以 (这里我一开始在Fragment里面 申请权限 我刚开始傻乎乎的还在BaseFragment里面也写了一套这个 醉了 当时感冒吃了感冒药 晕头了 )。
相关文章推荐
- Android 6.0运行时权限 baseactivity简单封装
- Android 6.0权限管理及其封装
- Android 采用AOP方式封装6.0权限管理的方法
- Android实战之6.0权限申请详解及简单封装(Util方向)
- Android 6.0 运行时权限 fragment的简单封装 basefragment
- Android 6.0 - 动态权限管理的解决方案
- Android 6.0 以上权限大坑和权限检查基类封装
- Android 6.0 最简单的权限获取方法 RxPermition EasyPermition
- android 6.0 权限管理
- Android 跳往 魅族 小米权限管理自启动(6.0)
- Android 6.0 权限管理最佳实践
- Android 6.0权限详解及封装
- android 6.0 权限管理的学习资料和使用例子
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- 关于Android23以上权限管理神器!RxPermission的简单介绍
- Android权限管理之Android 6.0运行时权限及解决办法
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- android 6.0以上多权限管理
- Android权限管理PermissionsDispatcher2.3.2使用+原生6.0权限使用
- Android 6.0: 动态权限管理的解决方案