美文网首页
Android XXPermissions 一行代码搞定动态权限

Android XXPermissions 一行代码搞定动态权限

作者: 蒙多喝醉了 | 来源:发表于2020-06-06 22:02 被阅读0次

XXPermissions框架,真心好用啊,传送阵~~~

XXPermissions框架确实使用简单快捷,我在XXPermissions框架便捷的基础上,又简单封装了下,适合多数app在初始化时就询问所有危险权限。调用时机即初始化时,尚未调用需要危险权限的方法时,具体类如下:

public class NBPermission {
    private static Activity sContext;
    private static final String TAG = "NBSDKPermission";
    private static boolean isOpenTs = false;//我自己调试用的玩意,当然你也可以把它作为一个提示开关,无伤大雅~

    /**
     * 获取权限
     * @param context
     * @param isAsk 是否开启获取权限功能
     * @param permissions
     */
    public static void getPermission(Context context,boolean isAsk,String... permissions){
        sContext = (Activity)context;
        if(!isAsk)return;
        try {
            if (XXPermissions.isHasPermission(context, permissions)) 
            {
                NBUtils.log(TAG, "已经获得所需所有权限");
                if (isOpenTs) {
                    Toast.makeText(sContext, "已经获得所需所有权限", Toast.LENGTH_SHORT).show();
                }
            }else {
                XXPermissions.with((Activity)context).permission(permissions).request(new OnPermission() {
                            @Override
                            public void noPermission(List<String> denied, boolean quick) {
                                if (quick) {
                                    NBUtils.log(TAG, "被永久拒绝授权");
                                    if (isOpenTs) {
                                        Toast.makeText(sContext, "被永久拒绝授权", Toast.LENGTH_SHORT).show();
                                    }
                                }else {
                                    NBUtils.log(TAG, "获取权限失败");
                                    if (isOpenTs) {
                                        Toast.makeText(sContext, "获取权限失败", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }
                            @Override
                            public void hasPermission(List<String> granted, boolean isAll) {
                                if (isAll) {
                                    NBUtils.log(TAG, "获取权限成功");
                                    if (isOpenTs) {
                                        Toast.makeText(sContext, "获取权限成功", Toast.LENGTH_SHORT).show();
                                    }
                                }else {
                                    NBUtils.log(TAG, "部分权限未正常授予");
                                    if (isOpenTs) {
                                        Toast.makeText(sContext, "部分权限未正常授予", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }
                        });
            }
        } catch (Exception e) {
            NBUtils.log(TAG, "获取权限时发生了错误,请检查清单是否配置权限,或者其他:"+e.toString());
            if (isOpenTs) {
                Toast.makeText(sContext, "获取权限时发生了错误,请检查清单是否配置权限,或者其他:"+e.toString(), Toast.LENGTH_SHORT).show();
            }
        }
    }

    /**
     * 获取权限
     * @param context
     * @param isAsk 是否开启获取权限功能
     * @param isOpenGudie 获取权限失败时,是否引导用户去权限界面,手动打开权限
     * @param isOpenGudieForce 是否强制引导用户去权限界面授权
     * @param title 引导的dialog界面的title.例如:开启权限引导
     * @param message 引导的dialog界面中显示的提示内容,例如:被您永久禁用的权限为应用必要权限,是否需要引导您去手动开启权限呢?
     * @param okButMessage 确认按钮显示的内容
     * @param noButMessage 否定按钮显示的内容
     * @param permissions
     */
    public static void getPermission(Context context,boolean isAsk,final boolean isOpenGudie,final boolean isOpenGudieForce,final String title,final String message,final String okButMessage,final String noButMessage,String... permissions){
        sContext = (Activity)context;
        if(!isAsk)return;
        try {
            if (XXPermissions.isHasPermission(context, permissions)) 
            {
                NBUtils.log(TAG, "已经获得所需所有权限");
            }else {
                XXPermissions.with((Activity)context).permission(permissions).request(new OnPermission() {
                            @Override
                            public void noPermission(List<String> denied, boolean quick) {
                                if (quick) {
                                    NBUtils.log(TAG, "被永久拒绝授权,请手动授予权限");
                                    if (isOpenTs) {
                                        Toast.makeText(sContext, "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show();
                                    }
                                    //如果是被永久拒绝就跳转到应用权限系统设置页面
                                    if(isOpenGudie) {
                                        final AlertDialog.Builder normalDialog = 
                                                new AlertDialog.Builder(sContext);
                                        if(title != null && !title.equals(""))normalDialog.setTitle(title);
                                        if(message != null && !message.equals(""))normalDialog.setMessage(message);
                                        if(okButMessage != null){
                                            normalDialog.setPositiveButton(okButMessage.equals("")?"好的":okButMessage, new OnClickListener() {
                                                public void onClick(DialogInterface arg0, int arg1) {
                                                    XXPermissions.gotoPermissionSettings(sContext);
                                                }
                                            });
                                        }

                                        if(noButMessage != null){
                                            if (!isOpenGudieForce) {
                                                normalDialog.setNegativeButton(noButMessage.equals("")?"下一次":noButMessage, new OnClickListener() {
                                                    public void onClick(DialogInterface arg0, int arg1) {
                                                    }
                                                });
                                            }
                                        }
                                        normalDialog.show();
                                    }
                                }else {
                                    NBUtils.log(TAG, "获取权限失败");
                                    if (isOpenTs) {
                                        Toast.makeText(sContext, "获取权限失败", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }
                            @Override
                            public void hasPermission(List<String> granted, boolean isAll) {
                                if (isAll) {
                                    NBUtils.log(TAG, "获取权限成功");
                                    if (isOpenTs) {
                                        Toast.makeText(sContext, "获取权限成功", Toast.LENGTH_SHORT).show();
                                    }
                                }else {
                                    NBUtils.log(TAG, "部分权限未正常授予");
                                    if (isOpenTs) {
                                        Toast.makeText(sContext, "部分权限未正常授予", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }
                        });
            }
        } catch (Exception e) {
            NBUtils.log(TAG, "获取权限时发生了错误,请检查清单是否配置权限,或者其他:"+e.toString());
            if (isOpenTs) {
                Toast.makeText(sContext, "获取权限时发生了错误,请检查清单是否配置权限,或者其他:"+e.toString(), Toast.LENGTH_SHORT).show();
            }
        }
    }
}

使用1:

//获取权限,不需要强制提示什么时
NBPermission.getPermission(Context context,boolean isAsk,String... permissions)
//示例,需要申请俩权限,就写俩就成:
NBPermission.getPermission(context,true,Permission.READ_PHONE_STATE,Permission.WRITE_EXTERNAL_STORAGE);

使用2:

//这个是需要引导用户去权限界面,给出弹窗提示,手动打开权限时可以使用
NBPermission.getPermission(Context context,boolean isAsk,final boolean isOpenGudie,final boolean isOpenGudieForce,final String title,final String message,final String okButMessage,final String noButMessage,String... permissions)

基本支持:

//是否有此权限
if (XXPermissions.isHasPermission(this, Permission.Group.STORAGE)) {
    
}
//跳转到设置页面
XXPermissions.gotoPermissionSettings(this);

我使用的版本是5.5 ,资源jar下载 go~

相关文章

网友评论

      本文标题:Android XXPermissions 一行代码搞定动态权限

      本文链接:https://www.haomeiwen.com/subject/lsiftktx.html