您的位置:首页 > 移动开发 > Android开发

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;

}
//检查系统权限是,判断当前是否缺少权限(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