package safeluck.drive.evaluation.util; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.util.ArrayList; /** * MyApplication2 * Created by lzw on 2019/9/9. 17:45:48 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public abstract class PermissionManager { private static final String PACKAGE_URL_SCHEME = "package:"; private Activity mTargetActivity; /** * 权限通过 * @param requestCode */ public abstract void authorized(int requestCode); /** * 有权限没通过 * @param requestCode * @param lackPermissions */ public abstract void noAuthorization(int requestCode,String[] lackPermissions); /** * Android 6.0以下的系统不设置校验权限 */ public abstract void ignore(); public PermissionManager(Activity targetActivity){ this.mTargetActivity = targetActivity; } public void checkPermissions(int requestCode,String... permissions){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ ArrayList lacks = new ArrayList<>(); for (String permission:permissions){ if (ContextCompat.checkSelfPermission(mTargetActivity.getApplicationContext(),permission) == PackageManager.PERMISSION_DENIED){ lacks.add(permission); } } if (!lacks.isEmpty()){ //有权限没有授权 String[] lacksPermissions = new String[lacks.size()]; lacksPermissions = lacks.toArray(lacksPermissions); ActivityCompat.requestPermissions(mTargetActivity,lacksPermissions,requestCode); }else{ authorized(requestCode); } }else{ // 6.0以下版本不校验权限 ignore(); } } public void recheckPermissions(int requestCode, @NonNull String[] permissions, @NonNull int[] grantReuslts){ for (int grantResult : grantReuslts) { if (grantResult == PackageManager.PERMISSION_DENIED) { //未授权 noAuthorization(requestCode,permissions); } } authorized(requestCode); } public static void startAppSettings(Context context){ Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse(PACKAGE_URL_SCHEME + context.getApplicationContext().getPackageName() )); context.startActivity(intent); } }