- 权限 ---- PermissionUtil
package com.behe.treasure.util;
import android.app.Activity;
import android.content.Context;
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.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Jevons Lee on 2017/5/22.
* 权限工具类
*/
public class PermissionUtil {
/**
* 通用权限请求码
*/
public static final int REQUEST_PERMISSION_CODE = 1;
/**
* {@link PackageManager#PERMISSION_GRANTED}
* 授权码
*/
public static final int PERMISSION_GRANTED = PackageManager.PERMISSION_GRANTED;
/**
* {@link PackageManager#PERMISSION_DENIED}
* 未授权码
*/
public static final int PERMISSION_DENIED = PackageManager.PERMISSION_DENIED;
/**
* 申请权限
* @param activity Activity
* @param requestCode 请求码
* @param permissions 权限
*/
public static void requestPermission(Activity activity, int requestCode, String... permissions) {
//判断是6,0以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List<String> list = new ArrayList<>();
for (String s : permissions) {
//没有权限,
// PackageManager.PERMISSION_GRANTED表示权限已经被授予,
// PackageManager.PERMISSION_DENIED表示权限没有被授予,
if (!checkPermission(activity, s)) {
list.add(s);
}
}
if (!list.isEmpty()) {
//转化成数组
String[] ps = list.toArray(new String[list.size()]);
//申请权限
//方法1
ActivityCompat.requestPermissions(activity, ps, requestCode);
//方法2,Activity中的方法
// activity.requestPermissions(ps, requestCode);
}
} else {
startAppSettings(activity);
}
}
/**
* 申请权限
* @param activity Activity
* @param requestCode 请求码
* @param list 权限集合
*/
public static void requestPermission(Activity activity, int requestCode, List<String> list) {
//转化成数组
String[] ps = list.toArray(new String[list.size()]);
requestPermission(activity, requestCode, ps);
}
/**
* 申请权限
* @param fragment Fragment
* @param requestCode 请求码
* @param permissions 权限
*/
public static void requestPermission(Fragment fragment, int requestCode, String... permissions) {
Activity activity = fragment.getActivity();
if (activity == null) {
return;
}
//判断是6,0以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List<String> list = new ArrayList<>();
for (String s : permissions) {
//没有权限,
// PackageManager.PERMISSION_GRANTED表示权限已经被授予,
// PackageManager.PERMISSION_DENIED表示权限没有被授予,
if (!checkPermission(activity, s)) {
list.add(s);
}
}
if (!list.isEmpty()) {
//转化成数组
String[] ps = list.toArray(new String[list.size()]);
//申请权限
fragment.requestPermissions(ps, requestCode);
}
} else {
startAppSettings(activity);
}
}
/**
* 申请权限
* @param fragment Fragment
* @param requestCode 请求码
* @param list 权限集合
*/
public static void requestPermission(Fragment fragment, int requestCode, List<String> list) {
//转化成数组
String[] ps = list.toArray(new String[list.size()]);
requestPermission(fragment, requestCode, ps);
}
/**
* 检查是否有权限
* @param context Context
* @param permissions 权限
* @return 有权限则返回true
*/
public static boolean checkPermission(Context context, String permissions) {
return ActivityCompat.checkSelfPermission(context, permissions) == PackageManager.PERMISSION_GRANTED;
}
/**
* 启动到系统设置
* @param context Context
*/
public static void startAppSettings(Context context) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + context.getPackageName()));
context.startActivity(intent);
}
/**
* 拒绝权限提示
* @param context Context
* @param message 提示内容
* @param deniedToastMsg 再次拒绝提示
*/
public static void hintDenied(final Context context, String message, final String deniedToastMsg){
hintDenied(context, message, deniedToastMsg, "给予");
}
/**
* 拒绝权限提示
* @param context Context
* @param message 提示内容
* @param deniedToastMsg 再次拒绝提示
* @param btnMsg 设置按钮的文字
*/
public static void hintDenied(final Context context, String message, final String deniedToastMsg, String btnMsg){
DialogUtil.init(context)
.setMessage(message)
.setButton(btnMsg, new DialogUtil.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int flag) {
if (flag == DialogUtil.POSITIVE){
startAppSettings(context);
} else {
if (deniedToastMsg != null && deniedToastMsg.trim().length() > 0){
T.show(context, deniedToastMsg);
}
}
}
}).show().setCancelable(false);
}
}