eclipse适配权限管理,找不到checkSelfPermission(权限管理工具类)

The method requestPermissions(Activity, String[], int) is undefined for the type ActivityCompat,使用eclipse适配权限管理,找不到checkSelfPermission方法,主要是因为项目里的v4包版本比较老,下载替换后即可,下载链接(https://download.csdn.net/download/qq_20523943/11259163),另附上一个简单的权限管理工具类
 

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;

/**
 * 权限工具类
 */

public class PermissionsUtils {
	private final int mRequestCode = 100;// 权限请求码
	public static boolean showSystemSetting = true;

	private PermissionsUtils() {
	}

	private static PermissionsUtils permissionsUtils;
	private IPermissionsResult mPermissionsResult;

	public static PermissionsUtils getInstance() {
		if (permissionsUtils == null) {
			permissionsUtils = new PermissionsUtils();
		}
		return permissionsUtils;
	}

	public void chekPermissions(Activity context, String[] permissions,
			@NonNull IPermissionsResult permissionsResult) {
		mPermissionsResult = permissionsResult;

		if (Build.VERSION.SDK_INT < 23) {// 6.0才用动态权限
			permissionsResult.passPermissons();
			return;
		}

		// 创建一个mPermissionList,逐个判断哪些权限未授予,未授予的权限存储到mPerrrmissionList中
		List<String> mPermissionList = new ArrayList<>();
		// 逐个判断你要的权限是否已经通过
		for (int i = 0; i < permissions.length; i++) {
			if (ContextCompat.checkSelfPermission(context, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
				mPermissionList.add(permissions[i]);// 添加还未授予的权限
			}
		}

		// 申请权限
		if (mPermissionList.size() > 0) {// 有权限没有通过,需要申请
			ActivityCompat.requestPermissions(context, permissions,
					mRequestCode);
		} else {
			// 说明权限都已经通过,可以做你想做的事情去
			permissionsResult.passPermissons();
			return;
		}
	}

	/**
	 * 请求权限后回调的方法
	 * 
	 * @param context
	 * @param requestCode
	 *            是我们自己定义的权限请求码
	 * @param permissions
	 *            是我们请求的权限名称数组
	 * @param grantResults
	 *            是我们在弹出页面后是否允许权限的标识数组,数组的长度对应的是权限名称数组的长度,数组的数据0表示允许权限,-1
	 *            表示我们点击了禁止权限
	 */
	public void onRequestPermissionsResult(Activity context, int requestCode,
			@NonNull String[] permissions, @NonNull int[] grantResults) {
		boolean hasPermissionDismiss = false;// 有权限没有通过
		if (mRequestCode == requestCode) {
			for (int i = 0; i < grantResults.length; i++) {
				if (grantResults[i] == -1) {
					hasPermissionDismiss = true;
				}
			}
			// 如果有权限没有被允许
			if (hasPermissionDismiss) {
				if (showSystemSetting) {
					showSystemPermissionsSettingDialog(context);// 跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问
				} else {
					mPermissionsResult.forbitPermissons();
				}
			} else {
				// 全部权限通过,可以进行下一步操作。。。
				mPermissionsResult.passPermissons();
			}
		}

	}

	/**
	 * 不再提示权限时的展示对话框
	 */
	AlertDialog mPermissionDialog;

	private void showSystemPermissionsSettingDialog(final Activity context) {
		final String mPackName = context.getPackageName();
		if (mPermissionDialog == null) {
			mPermissionDialog = new AlertDialog.Builder(context)
					.setMessage("已禁用权限,请手动授予")
					.setPositiveButton("设置",
							new DialogInterface.OnClickListener() {
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									cancelPermissionDialog();

									Uri packageURI = Uri.parse("package:"
											+ mPackName);
									Intent intent = new Intent(
											Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
											packageURI);
									context.startActivity(intent);
									context.finish();
								}
							})
					.setNegativeButton("取消",
							new DialogInterface.OnClickListener() {
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// 关闭页面或者做其他操作
									cancelPermissionDialog();
									// mContext.finish();
									mPermissionsResult.forbitPermissons();
								}
							}).create();
		}
		mPermissionDialog.show();
	}

	// 关闭对话框
	private void cancelPermissionDialog() {
		if (mPermissionDialog != null) {
			mPermissionDialog.cancel();
			mPermissionDialog = null;
		}

	}

	public interface IPermissionsResult {
		void passPermissons();

		void forbitPermissons();
	}
}

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值