android6.0权限通用管理(不在头大)

原文地址为: android6.0权限通用管理(不在头大)

一个类解决Android6.0权限的繁杂,完美应付日常开发,欢迎指教~

 在activity中涉及到需要申请权限的功能时,比如点击按钮照相,这是主要一段代码,没什么难度就是做了一个统一回调:

  /***
* request permission for activity's method of up 6.0
* @param permissions
* @param listener
*/
public void requestPermissionFeature(String[] permissions, PermissionListener listener) {
if (activity == null)
return;
shouldRequestPermissions = new ArrayList<>();
denied = new ArrayList<>();
tips = new ArrayList<>();
this.permissionListener = listener;
if (isNeedRequestPermission()) {
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED)
shouldRequestPermissions.add(permissions[i]);
}
if (shouldRequestPermissions.size() > 0) {
String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
ActivityCompat.requestPermissions(activity, requestPermissions, PERMISSIONS_REQUEST_CODE);
} else {
if (permissionListener != null)
permissionListener.granted();

}

} else {
if (permissionListener != null)
permissionListener.granted();
}
}
在activity中这样用,同意回调,拒绝回调,拒绝后不再提示回调(需要用户手动去设置开启),注意:如果这个功能需要多个权限,有一个用户没有通过,那么该功能不可用,大家根据自己的需求在不同的回调里做操作:

    private void permissget() {   
builder.activity(this).requestPermissionFeature(new String[]{Manifest.permission.READ_PHONE_STATE}, new Permission.PermissionListener() {
@Override
public void granted() {
initInfo();
}
@Override
public void deniedNeverAsk() {
ToastUtils.showToast(WelcomeActivity.this,getString(R.string.deniedNeverAsk));
}
@Override
public void denied() {
finish();
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
builder.RequestPermissionsResult(requestCode,permissions,grantResults);
}
在fragment中差不多的用法  把上面的builder.activity(this)换成builder.fragment (this), 方法名requestPermissionForFragment,我会把全部类贴出来直接拿去用就ok了!!!

如果有什么问题还请指出。。后面会有更多野路子来应付实际开发(都是坑啊)

完整类↓↓

public class Permission {

public Permission() {
}
public static class Builder {
private List<String> shouldRequestPermissions;
private List<Integer> denied;
private List<Boolean> tips;
private Activity activity;
private Fragment fragment;
private PermissionListener permissionListener;
private final int PERMISSIONS_REQUEST_CODE = 42;

public Builder() {

}

public Permission build() {
return new Permission();
}

public Builder activity(Activity activity) {
this.activity = activity;
return this;
}

public Builder fragment(Fragment fragment) {
this.fragment = fragment;
return this;
}
/***
* request permission for activity's method of up 6.0
* @param permissions
* @param listener
*/
public void requestPermissionFeature(String[] permissions, PermissionListener listener) {
if (activity == null)
return;
shouldRequestPermissions = new ArrayList<>();
denied = new ArrayList<>();
tips = new ArrayList<>();
this.permissionListener = listener;
if (isNeedRequestPermission()) {
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED)
shouldRequestPermissions.add(permissions[i]);
}
if (shouldRequestPermissions.size() > 0) {
String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
ActivityCompat.requestPermissions(activity, requestPermissions, PERMISSIONS_REQUEST_CODE);
} else {
if (permissionListener != null)
permissionListener.granted();

}

} else {
if (permissionListener != null)
permissionListener.granted();
}
}

/***
* request permission for fragment's method of up 6.0
* @param permissions
* @param listener
*/
public void requestPermissionForFragment(String[] permissions, PermissionListener listener) {
if (fragment == null)
return;
shouldRequestPermissions = new ArrayList<>();
denied = new ArrayList<>();
tips = new ArrayList<>();
this.permissionListener = listener;
if (isNeedRequestPermission()) {
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(fragment.getContext(), permissions[i]) != PackageManager.PERMISSION_GRANTED)
shouldRequestPermissions.add(permissions[i]);
}
if (shouldRequestPermissions.size() > 0) {
String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);

fragment.requestPermissions(requestPermissions, PERMISSIONS_REQUEST_CODE);
} else {
if (permissionListener != null)
permissionListener.granted();
}

} else {
if (permissionListener != null)
permissionListener.granted();
}
}

/**
* this callback of all request permission
* @param requestCode
* @param permissions
* @param grantResults
*/
public void RequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode != PERMISSIONS_REQUEST_CODE)
return;
for (int i = 0; i < permissions.length; i++) {
boolean isTip=false;
if (activity != null) {
isTip = ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[i]);
} else {
isTip = ActivityCompat.shouldShowRequestPermissionRationale(fragment.getActivity(), permissions[i]);
}
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
denied.add(i);
if (!isTip)
tips.add(isTip);
}
}
if (denied.size() > 0) {
if (permissionListener != null) {
if (tips.size() > 0)
permissionListener.deniedNeverAsk();
else
permissionListener.denied();
}

} else {
if (permissionListener != null)
permissionListener.granted();
}
}
}

private static boolean isNeedRequestPermission() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? true : false;
}

public interface PermissionListener {
void granted();

void denied();

void deniedNeverAsk();
}

}






转载请注明本文地址: android6.0权限通用管理(不在头大)

猜你喜欢

转载自blog.csdn.net/dearbaba_8520/article/details/80880962