android 6.0 请求权限,Android 6.0之后,在运行时请求权限,工具类

关于运行时请求权限,很多重复的工作.so

这个工具类用于6.0之后 在运行时请求权限

关于主动权限需要注意的是:

1.所有需要的权限,不管是否有主动请求操作,都需要在manifest中做配置

2.权限有正常权限与危险权限:

在manifest中列出了正常权限,系统将自动授予该权限;

在manifest中列出了危险权限,则用户必须明确批准您的应用使用这些权限。

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.annotation.NonNull;

import android.support.v4.app.ActivityCompat;

import android.support.v4.content.ContextCompat;

import android.support.v7.app.AlertDialog;

import android.util.Log;

import java.util.Arrays;

/**

* Created by wangxingsheng on 2017/2/5.

*

* 这个工具类用于6.0之后 在运行时请求权限

* 关于主动权限需要注意的是

* 1.所有需要的权限,不管是否有主动请求操作,都需要在manifest中做配置

* 2.权限有正常权限与危险权限:

* 在manifest中列出了正常权限,系统将自动授予该权限;

* 在manifest中列出了危险权限,则用户必须明确批准您的应用使用这些权限。

*

*

* 更多见官方法介绍:https://developer.android.google.cn/training/permissions/requesting.html

*

*/

public class PermissionUtil {

private static void log(String debug){

Log.d("PermissionUtil",debug);

}

/**

* 主动请求权限,按官方推荐逻辑,此方法应该在每次需要权限时都要调用

* 检查权限->询问请求历史 ? 解释权限 (点击确认再次请求) : 直接请求权限

* @param thisActivity

* @param permission

* @param requestCode

* @param dialogMessage

*/

public static void requestPermissionWithCheck(Activity thisActivity, String permission, int requestCode, String dialogMessage){

if(Build.VERSION.SDK_INT < 23){

log("your sdk < 23,the method 'requestPermissionWithCheck(..' do nothing");

return;

}

try {

//检查权限是否已经开启

if (ContextCompat.checkSelfPermission(thisActivity,permission)

!= PackageManager.PERMISSION_GRANTED) {

log("the permission has not,continue...");

//如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。

//此时应该向用户解释为什么需要这个权限

if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,

permission)) {

//弹出解释弹窗

showExplanation(thisActivity,requestCode,dialogMessage,permission);

} else {

//发起权限请求

requestPermissions(thisActivity,new String[]{permission},requestCode);

}

}else{

log("the permission has ready");

}

}catch (Exception e){

log("the method 'requestPermissionWithCheck(..' apper error,so jump setting");

//请求权限的过程中出现问题直接跳到设置界面,让用户手动设置权限

openPermissionSetting(thisActivity);

}

}

/**

* 直接请求权限

*/

public static void requestPermissions(Activity thisActivity,String[] permissions,int requestCode){

log("request Permission " + Arrays.asList(permissions));

ActivityCompat.requestPermissions(thisActivity,

permissions,

requestCode);

}

/**

* 开启本应用权限设置界面

* @param context

*/

public static void openPermissionSetting(Context context){

log("start jump Setting...");

Intent intent = new Intent();

intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", context.getPackageName(), null);

intent.setData(uri);

context.startActivity(intent);

log("jump Setting end");

}

/**

* 弹出解释权限的弹框,点击确定请求权限

* @param thisActivity

* @param requestCode

* @param dialogMessage

* @param requestPermission

*/

public static void showExplanation(final Activity thisActivity,final int requestCode,

String dialogMessage, final String requestPermission) {

log("here show showExplanation");

String defaultMessage = "Need " + requestPermission + " authority, otherwise next function can not be used";

showMessageOKCancel(thisActivity,

dialogMessage == null ? defaultMessage : defaultMessage

, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

requestPermissions(thisActivity,new String[]{requestPermission},requestCode);

}

});

}

/**

* 在onRequestPermissionsResult中判断某个requestCode陪同的权限请求结果是否成功

*

* @param grantResults

* @return

*/

public static boolean checkRequestCode(@NonNull int[] grantResults){

if (grantResults.length > 0

&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

//权限请求成功

return true;

} else {

//权限请求被拒绝

return false;

}

}

/*此方法是在onRequestPermissionsResult中回调的例子

public final static void requestPermissionsResult(final Activity activity,

final int requestCode,

@NonNull String[] permissions,

@NonNull int[] grantResults) {

if (activity == null) {

return;

}

switch (requestCode) {

case -1:

if (PermissionUtil.checkRequestCode(grantResults)) {

//权限请求成功

} else {

//权限请求被拒绝

}

break;

default:

}

}

*/

/**

* 一个普通弹窗

* @param context

* @param message

* @param okListener

*/

private static void showMessageOKCancel(final Activity context, String message, DialogInterface.OnClickListener okListener) {

new AlertDialog.Builder(context)

.setMessage(message)

.setPositiveButton("OK", okListener)

.setNegativeButton("Cancel", null)

.create()

.show();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值