注意!
eclipse 问题:The method checkSelfPermission(Context, String) is undefined for the type ContextCompat解决。
必须是SDK6.0里的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);
- }