当前位置: 首页 > news >正文

Android:权限permission申请示例代码

Android应用项目每次最开始都要进行权限申请,贴一下权限申请的示例代码,方便后续Ctrl C+V使用

1.AndroidManifest.xml 配置要申请的权限

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.示例代码:

可以封装成一个权限类供其他地方调用,懒得写了,代码先散装着贴吧。

    private static final int REQUEST_PERMISSION_CODE = 101010;  //默认请求权限的requestCode为1

    //需要申请的权限数组
    private String[] requestPermissionArray = new String[]{
            Manifest.permission.READ_CONTACTS,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

    public void checkPermission(Context context, String[] permissions) {
        //存放permissions中当前未被授予的权限
        List<String> permissionList = new ArrayList<>();

        //遍历权限数组,检测所需权限是否已被授予,若该权限尚未授予,添加到permissionList中
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                Log.e(TAG, "checkSelfPermission:" + permission);

                if (!permissionList.contains(permission)) {
                    permissionList.add(permission);
                    Log.e(TAG, "permissionList add " + permission);
                }
            }
        }

        if (!permissionList.isEmpty()) {
            //有权限尚未授予,去授予权限
            ActivityCompat.requestPermissions((Activity) context,
                    permissionList.toArray(new String[permissionList.size()]),
                    REQUEST_PERMISSION_CODE);
        } else {
            //权限都被授予了
            Log.d(TAG, "权限都授予了");

            //doSomething();
        }
    }

    /**
     * 申请权限结果返回
     *
     * 通常checkPermission()权限都能申请下来,返回结果不处理也没问题
     *
     * @param requestCode  请求码
     * @param permissions  所有申请的权限集合
     * @param grantResults 权限申请的结果
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        Log.i(TAG, "onRequestPermissionsResult");

        switch (requestCode) {
            case REQUEST_PERMISSION_CODE:
                if (grantResults.length > 0) { //有权限申请
                    //存储被用户拒绝的权限
                    List<String> deniedPermissionList = new ArrayList<>();
                    //有权限被拒绝,分类出被拒绝的权限
                    for (int i = 0; i < grantResults.length; i++) {
                        String permission = permissions[i];
                        int grantResult = grantResults[i];
                        if (grantResult != PackageManager.PERMISSION_GRANTED) {
                            if (!deniedPermissionList.contains(permission)) {
                                deniedPermissionList.add(permission);
                            }
                        }
                    }

                    if (deniedPermissionList.isEmpty()) {
                        //没有被拒绝的权限
                        Log.d(TAG, "权限都授予了");
                        //doSomething();
                    } else {
                        //有被拒绝的权限
                        Log.e(TAG, "有权限被拒绝了");
                        //继续申请
                    }
                }
                break;
        }
    }

相关文章:

  • 如何在Vue中更优雅地处理403错误?
  • ubuntu24.04无法安装向日葵,提示依赖libgconf-2-4怎么办?
  • win10把c盘docker虚拟硬盘映射迁移到别的磁盘
  • Windows 图形显示驱动开发-上下文监视
  • 使用Ubuntu搭建Java部署环境
  • QPainter绘制3D 饼状图
  • VMware NSX 4.X Professional V2(2V0-41.24)题库
  • 软考高级信息系统项目管理师笔记-第2章信息技术发展
  • Python开源项目月排行 2025年1月
  • 智能预警系统标准化处理流程
  • LeetCode刷题---二分查找---350
  • 鸿蒙-Canvas-图片滑动验证
  • 索引的优缺点与常见类型详解
  • 基于YOLO11深度学习的半导体芯片缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】
  • stm32-LCD(液晶显示器)
  • Python爬虫具体是如何解析商品信息的?
  • Mac book Air M2 用VMware安装 Ubuntu22.04
  • 最短路的方案数+打印路径
  • 基于WebRTC与AI大模型接入EasyRTC:打造轻量级、高实时、强互动的嵌入式音视频解决方案
  • Ollama常用命令详解:快速掌握核心操作
  • 06年可以做相册视频的网站/淘宝美工培训
  • 乐清网站建设honmau/培训学校机构有哪些
  • 重庆企业网站制作外包/东莞谷歌推广公司
  • 网站源码下载教程/关键词查询工具软件
  • 企业网站制作报价单/莆田百度seo公司
  • 济南网站开发企业/电脑培训班零基础网课