代码编织梦想

#Android开发杂记--Jetpack Compose 中的权限申请

引言

        目前 Jetpack Compose 的权限申请方面还不太成熟,官方推荐的做法是使用 accompanist ,但该库尚处于 Experimental 阶段,且使用起来也不简单。这里记录一下我自己发现的一种非常简单优雅的权限申请方法。


截图


源码

小提示:别忘了在Manifest文件中先声明权限,如果是Android10以上的话,还得在 Manifest 的 application 中添加属性

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

<application
        android:requestLegacyExternalStorage="true"
        ...>
        <activity>
        	...
        </activity>
</application>
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        requestPermissions(
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE
        ) {
            setContent {
                if (it.isEmpty()) {
                    Main()
                } else {
                    RequestFailed(permissions = it)
                }
            }
        }
    }

    /**
     * 请求权限,若用户拒绝,则将被拒绝的权限以回调形式返回
     *
     * @param permissions 要请求的权限
     * @param onResult 将用户拒绝的权限返回
     *
     */
    private fun requestPermissions(vararg permissions: String, onResult: (List<String>) -> Unit) {
        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result ->
            val failed = result.filter { !it.value }.keys
            onResult(failed.toList())
        }.launch(arrayOf(*permissions))
    }
}

@Composable
fun RequestFailed(permissions: List<String>) {
    LazyColumn {
        items(permissions) {
            Text(text = "权限 $it 获取失败。")
        }
    }
}

@Composable
fun Main() {
    Text(text = "权限申请成功!")
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43519779/article/details/122763127

android开发笔记(一)——权限申请_siriusqiu的博客-爱代码爱编程_安卓开发权限

文章目录 Android开发笔记(一)权限申请 Android开发笔记(一) 最近接手实验室研三的师兄师姐准备走了,接手他们遗留下来的工作。有个移动群智感知平台真的把我恶心坏了。基本架构如下:

对于Jetpack Compose的一次尝试-爱代码爱编程

/   今日科技快讯   / 在昨天落下帷幕的双十一购物狂欢节,天猫京东双双打破了各自己的记录。其中,天猫11.11当天的成交总额达到了2684亿,打破了去年2135亿的记录。而京东11.1~11.11期间的累计成交额达到了2044亿,打破了去年1598亿的记录。 /   作者简介   / 本篇文章来自薛定猫的谔的投稿,讲解了Google今

Android Jetpack Compose总结-爱代码爱编程

简介 Jetpack Compose 是用于构建native UI的新方式,写法跟Flutter非常相似,对Flutter有了解的同学可以很快上手。 官网:https://developer.android.com/jetpack/compose 官方demo :https://github.com/android/compose-samples 官方的

Android开发:Android6.0权限申请-爱代码爱编程

Android6.0以及更高的版本需要动态申请权限,在manifest中配置好权限之后,然后再动态申请所需权限,这里整理一下方便后期使用,代码如下: public class MainActivity extends BaseActivity { public String[] per = new String[]{ Ma

【Jetpack Compose最新版详解】(持续更新)-爱代码爱编程

【2020年的第一篇JB】 Jetpack Compose 完全解析(持续更新) 虽然工作了5,6年了,一直也有做笔记的习惯,但是从来没写过什么博客,最近开通了CSDN,打算将自己多年所学,通过博客展现出来,希望能使得自己的基础更加夯实,技术能力更进一步,思维更加缜密,同时能帮助到真正需要帮助的人。(JB :我对技术博客的简称) 1、什么是Compos

android短信动态权限设置,一文彻底解决Android动态权限申请(中)-爱代码爱编程

一文彻底解决Android动态权限申请(中) 作者:Lyoun_JAP 关于android动态权限申请的概念和最终实现的android动态权限申请的效果,都在上篇文档《一文彻底解决Android动态权限申请(上)》中有很丰富的体现。 首先说一下android关于动态申请权限需要用到的几个参数和方法,1、app用到的android sdk版本:an

android网络动态获取权限,基于JetPack实现的权限动态获取-爱代码爱编程

最近在学习如何使用Jetpack以及kotlin,相较于以往使用的onActivityResult,androidx-activity 1.2.0-alpha02及Fragment 1.3.0-alpha02版本中新追加了api ActivityResultContract 环境配置 为使用ActivityResultContract,我们需要在g

16. Compose 权限申请Permission-爱代码爱编程

01. Compose 可组合组件之Row And Column 02. Compose 可组合组件之 属性 modifier 03. Compose 可组合组件之Card 图片 04. Compose 字体 05. Compose State 06. Compose SnackBar 07. Compose List 08. Compose

Jetpack Compose 动态权限申请(Permission Request)-爱代码爱编程

在 Jetpack Compose 动态申请权限可以使用两种方法 rememberLancherForActivityResultAccompanist 的 Permissions接下来分贝展示一下两种用法 代码环境如下: Kotlin 1.5.2Jetpack Compose 1.0.2Android Studio Chipmunk | 202

【爬虫 | 1. Java之入门第一爬】-爱代码爱编程

1.0 简介 网络爬虫(Web Crawler),是按照一定的规则,自动地抓取万维网信息的程序或脚本。 1.1 入门 Java 爬虫 1.1.1 环境准备 JDK (链接: 如何查看自己的版本)IntelliJ IDEAIDEA 自带的 Maven版本(IntelliJ IDEA Ultimate + version 11.0.11 + Maven

文件压缩与解压缩-爱代码爱编程

在Java中,文件的压缩与解压缩,主要依赖三个类来完成,ZipInputStream、ZipOutputStream、ZipEntry。 使用java来压缩文件,准备好被压缩的文件。 Java实现压缩文件,直接上代码 import java.io.*; import java.util.ArrayList; import java.util.List;

【Android自动化】自动输入安装密码,并检测App是否安装成功-爱代码爱编程

准备工作 pip install --pre uiautomator2 (安装u2的库)pip install -U weditor (桌面可生成一个可执行的py)根据网上的资料去了解u2的使用方法安装App主文件(install_app.py) import subprocess import uiautomator2 as u2 import ti

时隔多年还能用android接私活-爱代码爱编程

大家好,我是脚丫先生 (o^^o) 说起,android,这是多么遥远的英文单词。 「第一行代码」 我想学过android开发的小伙伴都应该读过,可谓是入门神作。 看着郭霖大佬的大作,此刻,有那么带点陌生而又带一丝熟悉的味道。 思绪仿佛一下子拉到2015年,临近毕业,毫无一技之长的我,披星戴月,废寝忘食的啃 着大佬的第一行代码,一切都犹如昨日,恍