一个util带你解决动态申请权限问题(2018.8重编版)

简介: 前言Android从API23开始, 也就是Android6.0起, 有了一个动态申请权限的概念. 这里就分享给大家一个util来解决这个问题. 不过在代码之前我还有些要说的:动态申请权限第一次安装应用进入之后会要权限.

前言

Android从API23开始, 也就是Android6.0起, 有了一个动态申请权限的概念. 这里就分享给大家一个util来解决这个问题. 不过在代码之前我还有些要说的:

动态申请权限

第一次安装应用进入之后会要权限. 一般来说, 这个要权限都会在广告页之后, 进主页面之前, 因为如果不在进入之前拿到权限, 肯定有些功能就跑不动了, 仔细看图片后面的界面, 只显示了根路径, 下面为空. 那再给一张点击了allow重进的图片:

拿到权限后

使用

直接上代码:

public class PermissionsUtil {
    // 读写权限
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};

    /**
     * 检查应用程序是否有权写入设备存储
     * 如果应用程序没有权限,则会提示用户授予权限
     *
     * @param activity 所在的Activity
     */
    public static void verifyStoragePermissions(Activity activity) {
        // 检查应用程序是否有权写入设备存储
        int permission = ActivityCompat.checkSelfPermission(activity,
                Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            // 如果应用程序没有权限,则会提示用户授予权限
            ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE);
        }
    }
}

然后在前言说的位置:

verifyStoragePermissions(this);
/**
 * @param requestCode  请求码
 * @param permissions  权限
 * @param grantResults 授予结果
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                LogUtil.i(getResources().getString(R.string.succeed));
            } else {
                Toast.makeText(this, getResources().getString(R.string.failed), Toast.LENGTH_LONG).show();
                finish();
            }
            break;
        default:
    }
}

当然了, 基础的权限申请别忘了, 在AndroidManifest.xml

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

目录
相关文章
|
负载均衡 算法 5G
m基于5G通信的超密集网络多连接负载均衡和资源分配算法matlab仿真
m基于5G通信的超密集网络多连接负载均衡和资源分配算法matlab仿真
452 4
|
数据采集 前端开发 API
基于Qwen2大模型实现的中药智能化筛选助手
本文介绍了利用大语言模型微调技术在中药方剂智能化筛选与优化中的应用。项目涵盖微调环境搭建、数据预处理、智能体构建及效果评估等环节,展示了模型在生成新中药方剂上的创新能力和实用性。
基于Qwen2大模型实现的中药智能化筛选助手
|
6月前
|
人工智能 城市大脑 运维
2025数字中国建设峰会:阿里云+AI深入千行百业
近日,第八届数字中国建设峰会在福州召开。峰会期间,阿里云及通义大模型服务政企的一批领先成果被重点展示。
611 1
|
11月前
|
人工智能 搜索推荐 物联网
3D大模型助力,15分钟即可训练高质量、个性化的数字人模型,代码已开放
《MimicTalk: 快速生成个性化3D数字人》介绍了一种创新方法,利用3D大模型在15分钟内训练出高质量、个性化的数字人模型。该方法基于NeRF技术,通过“静态-动态混合适应”实现高效训练,显著提升了数字人在视频会议、虚拟现实等领域的应用潜力。论文链接:https://arxiv.org/pdf/2410.06734
339 4
|
前端开发
Hash、onHashChange事件
Hash、onHashChange事件
|
数据采集 安全 API
数据治理:实现原始数据不出域,确保数据可用不可见的创新策略
在数字化时代,数据成为企业宝贵资产,驱动业务决策与创新。然而,数据量激增和流通频繁带来了安全和管理挑战。“原始数据不出域,数据可用不可见”的治理理念应运而生,通过数据脱敏、沙箱技术和安全多方计算等手段,确保数据安全共享与高效利用。这一理念已广泛应用于金融、医疗等行业,提升了数据价值和企业竞争力。
2152 0
|
Java Maven Spring
Maven重打包问题之maven-shade-plugin插件对于重复的class文件会如何处理
Maven重打包问题之maven-shade-plugin插件对于重复的class文件会如何处理
329 2
|
SQL 安全 网络安全
网络安全与信息安全:从漏洞防护到加密技术的深度解析
本篇文章将深入探讨网络安全与信息安全的核心领域,重点关注网络安全漏洞的识别与防护、先进的加密技术以及提升安全意识的策略。通过详细分析各个方面的知识和实际应用,我们旨在帮助读者更好地理解并应对日益复杂的网络威胁。
1250 0
|
存储 关系型数据库 MySQL
MySQL隔离级别:提高数据库性能与数据安全的必备技能!
MySQL隔离级别:提高数据库性能与数据安全的必备技能!
691 0
|
SQL 关系型数据库 MySQL
MySQL in 太慢的 3 种优化方案
MySQL中的`eq_range_index_dive_limit`参数默认值为200,影响了IN查询的执行方式。当IN列表项少于这个值时,MySQL会使用扫描索引树(精确成本计算),而多于此值则使用索引统计(快速但可能不准)来分析查询成本。大量IN值可能导致性能下降。解决方案包括:1) 分批查询;2) 使用UNION ALL创建内存临时表;3) 创建实体表存储IN值并进行JOIN操作。注意,实体表需及时清理并避免反复插入删除导致性能下降。
2534 0