注意!最少需要v4-13版本的jar包支持才可运行!
package com.example.aleak.myapplication002.util;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PermissionInfo;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by aleak on 16-4-26.
* a util for check permission
*/
public class CheckPermissionUtils {
private static final String TAG = CheckPermissionUtils.class.getSimpleName();
/**
* check this permission is need to request
*
* @param context context
* @param permissionArray permissionArray
* @return
*/
public static String[] getNeededPermission(Context context, String[] permissionArray) {
if (context == null || permissionArray == null || permissionArray.length == 0) {
return new String[]{};
}
List<String> permissionList = new ArrayList<>();
for (int i = 0; i < permissionArray.length; i++) {
if (CheckPermissionUtils.isNeedAddPermission(context, permissionArray[i])) {
permissionList.add(permissionArray[i]);
}
}
return permissionList.toArray(new String[permissionList.size()]);
}
/**
* check permission is need ?
*
* @return true: need permission false: don't need permission
*/
public static boolean isNeedAddPermission(Context context, String permission) {
return ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED;
}
/**
* check permission and show setting dialog for user
*
* @param getPermissionListener getPermissionListener
* @param context context
* @param permissions permissions
* @param grantResults grantResults
*/
public static void checkPermissionResult(OnHasGetPermissionListener getPermissionListener, Context context
, String[] permissions, int[] grantResults) {
if (context == null || permissions == null || grantResults == null || getPermissionListener == null) {
android.util.Log.d(TAG, "context=" + context + "\n"
+ "permissions=" + Arrays.toString(permissions) + "\n"
+ "grantResults=" + Arrays.toString(grantResults));
return;
}
Log.d(TAG, "permissions=" + Arrays.toString(permissions) + ",grantResults=" + Arrays.toString(grantResults));
// save the request permission
List<PermissionInfo> list = new ArrayList<>();//Your permission list
if (grantResults.length <= 0) {
return;
}
// check permission request result
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
PermissionInfo info = null;
try {
info = context.getPackageManager().getPermissionInfo(permissions[i], 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (info != null) {
list.add(info);
}
}
}
// is we has all permission
if (list.size() == 0) {
Log.d(TAG, "checkPermissionResult onSuccess");
getPermissionListener.onSuccess();
} else {
getPermissionListener.onFail();
// show the dialog for user to setting
Log.d(TAG, "checkPermissionResult onFail");
}
}
public interface OnHasGetPermissionListener {
void onSuccess();
void onFail();
}
}
运行代码实例如下:(Fragment式 注意没用FramgCompat,为什么不用请自行研究,注意运行SDK必须 >=23)
public class FragmentRequest extends Fragment {
private static final String TAG = "FragmentRequest";
private static final int REQUEST_CODE_TEST = 999;
public void requestPermissiontest() {
// you needer permissions
String[] permissions = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
// check it is needed
permissions = CheckPermissionUtils.getNeededPermission(getActivity(), permissions);
// requestPermissions
if (permissions.length > 0) {
requestPermissions(permissions, REQUEST_CODE_TEST);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_TEST:
if (grantResults.length > 0) {
return;
}
if (!CheckPermissionUtils.isNeedAddPermission(getActivity(), Manifest.permission.READ_PHONE_STATE)) {
// do something
Toast.makeText(getActivity(), "申请权限成功:" + Manifest.permission.READ_PHONE_STATE, Toast.LENGTH_LONG).show();
}
if (!CheckPermissionUtils.isNeedAddPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// do something
Toast.makeText(getActivity(), "申请权限成功:" + Manifest.permission.WRITE_EXTERNAL_STORAGE, Toast.LENGTH_LONG).show();
}
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
部分代码是可以根据实际情况修改的,仅供参考;