Android 6.0 的权限管理自己简单的封装--(到BaseActivity)

一 。直接上代码 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;
}

//检查系统权限是,判断当前是否缺少权限(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里面也写了一套这个 醉了 当时感冒吃了感冒药 晕头了 )。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值