当前位置: 首页 > 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 权限申请的结果*/@Overridepublic 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;}}

http://www.lryc.cn/news/540839.html

相关文章:

  • AI Agent Service Toolkit:一站式大模型智能体开发套件
  • 大数据SQL调优专题——Hive执行原理
  • Python程序打包 |《Python基础教程》第18章笔记
  • 图论 之 迪斯科特拉算法求解最短路径
  • 掌握Spring开发_常用注解详解
  • 华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)
  • Kubernetes的Ingress和Service有什么区别?
  • 洛谷B3619(B3620)
  • vue组件,父子通信,路由,异步请求后台接口,跨域
  • 详解分布式ID实践
  • .NET + Vue3 的前后端项目在IIS的发布
  • 软件测试之压力测试
  • 矩阵-矩阵置零
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter19-表单脚本
  • 【C# 数据结构】队列 FIFO
  • 论文笔记-WWWCompanion2024-LLM as Data Augmenters for Cold-Start Item Recommendation
  • Java 语法新特性(Records、Pattern Matching、Sealed Classes)深度解析(11/17/21)✨
  • QUdpSocket的readyRead信号只触发一次
  • jsherp importItemExcel接口存在SQL注入
  • 测试data_management函数
  • 微信小程序---计划时钟设计与实现
  • 深度学习之图像回归(二)
  • 深入理解HttpSecurity的设计
  • 15增减字符串匹配(贪心)思路解析+源码
  • Java NIO与传统IO性能对比分析
  • 14.7 LangChain Experimental 模块解析:解锁 Auto-GPT 开发新范式
  • wps中的js开发
  • day16_推荐系统和总结
  • 一文说清楚编码、摘要、加密、公钥、私钥、解密、签名、验签
  • Repeated Sequence