zoukankan      html  css  js  c++  java
  • 安卓权限处理 PermissionDog

    PermissionDog

    简介


    权限狗 权限申请


    最近在一家公司实习,项目中需要用到适配安卓6.0以上的系统,我本来是想用其他人已经写好的权限申请框架来实现的,但是发现跟我的需求有点小区别,所以就自己写了一个

    这个权限申请的帮助类很小,只有一个java文件,复制到你的项目中就可以直接使用

    没想到什么好名字 既然有权限,那就叫权限狗吧


    #使用截图

    请求单个权限

    请求多个权限

    请求多个权限失败

    请求多个权限是勾选了不再显示


    特性

    1:支持单个和多个权限的申请

    2:单个支持三个回调:允许,拒绝,勾中不再显示框并拒绝

    3:多个权限回调时返回允许,拒绝,勾中不再显示框并拒绝的权限列表
    使用

    1.在你需要申请权限的Activity中重写onRequestPermissionsResult

    @Override
    public void onRequestPermissionsResult(int requestCode,
    @NonNull String[] permissions,
    @NonNull int[] grantResults) {
    PermissionDog.getInstance().notifyPermissionsChanged(MainActivity.this, requestCode, permissions, grantResults);
    }

    2.在你需要申请权限的地方添加以下代码

    请求单个权限

    private void requestSinglePermission() {
    PermissionDog.getInstance().SetAction(new PermissionDog.PermissionDogAction() {
    @Override
    public void never() {
    super.never();
    //已经勾选了不再提醒
    Toast.makeText(MainActivity.this, "已经拒绝权限,请前往设置开启", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    Uri uri = Uri.fromParts("package", getPackageName(), null);
    intent.setData(uri);
    startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
    }
    
    @Override
    public void denied() {
    super.denied();
    //未获取到权限
    Toast.makeText(MainActivity.this, "未获取到了单个权限", Toast.LENGTH_SHORT).show();
    
    }
    
    @Override
    public void grant() {
    super.grant();
    //获取到了权限
    Toast.makeText(MainActivity.this, "获取到了单个权限", Toast.LENGTH_SHORT).show();
    
    }
    });
    PermissionDog.getInstance().requestSinglePermissions(MainActivity.this, singlePermission);
    }
    

      

    请求多个权限

    private void requestMultiPermission() {
    PermissionDog.getInstance().SetAction(new PermissionDog.PermissionDogAction() {
    @Override
    public void allallow() {
    super.allallow();
    //在此设置权限全部被允许后的操作
    Toast.makeText(MainActivity.this, "多个权限全部被允许", Toast.LENGTH_SHORT).show();
    
    }
    
    @Override
    public void multi(String[] granteds, String[] denieds, String[] nevershows) {
    if (nevershows.length != 0) {
    new AlertDialog.Builder(MainActivity.this, R.style.DialogTheme).setTitle("Permission")
    .setMessage("PermissionDog需要摄像头和拨打电话的权限")
    .setPositiveButton("前往设置", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    Uri uri = Uri.fromParts("package", getPackageName(), null);
    intent.setData(uri);
    startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
    }
    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    //有权限被勾选了不再提醒
    Toast.makeText(MainActivity.this, "有权限被勾选了不再提醒", Toast.LENGTH_SHORT).show();
    }
    }).create().show();
    } else {
    if (denieds.length != 0) {
    new AlertDialog.Builder(MainActivity.this, R.style.DialogTheme).setTitle("Permission")
    .setMessage("PermissionDog需要读写空间和拨打电话的权限")
    .setPositiveButton("获取", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    PermissionDog.getInstance().requestMultiPermissions(MainActivity.this, multiPermission);
    }
    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    Toast.makeText(MainActivity.this, "未获取到必要的权限", Toast.LENGTH_SHORT).show();
    }
    }).create().show();
    } else {
    //在此设置权限全部被允许后的操作
    Toast.makeText(MainActivity.this, "多个权限全部被允许", Toast.LENGTH_SHORT).show();
    }
    }
    }
    });
    
    PermissionDog.getInstance().requestMultiPermissions(MainActivity.this, multiPermission);
    
    }

    3.运行

    ##解释:

    申请单个权限时重写never,denied,grant三个方法
    申请多个权限时重写allallow,multi两个方法

    你可以在我的github上找到你需要的PermissionDog源文件

    地址:https://github.com/hei12138/PermissionDog

    有任何问题可以随时联系我:1329698854@qq.com

  • 相关阅读:
    asp.net core 3.1 源码学习(二)
    asp.net core 3.1 源码学习(一)
    netcore3.0 IHost 源码解析(二)
    netcore3.0 IHost 源码解析(一)
    netcore3.0 Logging 日志系统(三)
    netcore3.0 Logging 日志系统(二)
    netcore3.0 Logging 日志系统(一)
    netcore3.0 IOptions 选项(二)
    Nginx使用记录
    SC Create 创建一个Windows系统服务 转
  • 原文地址:https://www.cnblogs.com/hei12138/p/PermissionDog.html
Copyright © 2011-2022 走看看