package com.fimi.x8sdk.util; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.net.Uri; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog.Builder; import java.util.ArrayList; import java.util.List; public class XPermission { private static OnPermissionListener mOnPermissionListener; private static int mRequestCode = -1; public interface OnPermissionListener { void onPermissionDenied(); void onPermissionGranted(); } @TargetApi(23) public static void requestPermissions(Context context, int requestCode, String[] permissions, OnPermissionListener listener) { if (context instanceof Activity) { mOnPermissionListener = listener; List<String> deniedPermissions = getDeniedPermissions(context, permissions); if (deniedPermissions.size() > 0) { mRequestCode = requestCode; ((Activity) context).requestPermissions((String[]) deniedPermissions.toArray(new String[deniedPermissions.size()]), requestCode); return; } else if (mOnPermissionListener != null) { mOnPermissionListener.onPermissionGranted(); return; } else { return; } } throw new RuntimeException("Context must be an Activity"); } private static List<String> getDeniedPermissions(Context context, String... permissions) { List<String> deniedPermissions = new ArrayList(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(context, permission) == -1) { deniedPermissions.add(permission); } } return deniedPermissions; } public static void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (mRequestCode != -1 && requestCode == mRequestCode && mOnPermissionListener != null) { if (verifyPermissions(grantResults)) { mOnPermissionListener.onPermissionGranted(); } else { mOnPermissionListener.onPermissionDenied(); } } } private static boolean verifyPermissions(int[] grantResults) { for (int grantResult : grantResults) { if (grantResult != 0) { return false; } } return true; } public static void showTipsDialog(final Context context) { new Builder(context).setTitle((CharSequence) "提示信息").setMessage((CharSequence) "当前应用缺少必要权限,该功能暂时无法使用。如若需要,请单击【确定】按钮前往设置中心进行权限授权。").setNegativeButton((CharSequence) "取消", null).setPositiveButton((CharSequence) "确定", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { XPermission.startAppSettings(context); } }).show(); } private static void startAppSettings(Context context) { Intent intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS"); intent.setData(Uri.parse("package:" + context.getPackageName())); context.startActivity(intent); } }