android6.0(M) 验证权限 常用工具类一枚

注意!最少需要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);
    }


部分代码是可以根据实际情况修改的,仅供参考;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值