当前位置: 首页 > news >正文 html5可以做网站吗管理系统门户网站开发路线 news 2025/10/29 11:04:26 html5可以做网站吗,管理系统门户网站开发路线,淘客的手机网站怎么做,建立的意思解释这一节主要了解一下Compose中权限的申请#xff0c;其中主要用到accompanist-permissions这个权限库#xff0c;它是一个简化的Android Compose 中权限管理的库#xff0c;如下使用#xff1a; 栗子: 依赖添加 dependencies {implementation(com.google.accompani… 这一节主要了解一下Compose中权限的申请其中主要用到accompanist-permissions这个权限库它是一个简化的Android Compose 中权限管理的库如下使用 栗子: 依赖添加 dependencies {implementation(com.google.accompanist:accompanist-permissions:0.31.2-alpha) } 单个权限 OptIn(ExperimentalPermissionsApi::class) Composable fun PermissionExample() {val permissionState rememberPermissionState(permission Manifest.permission.CAMERA)Scaffold(topBar {TopAppBar(title { Text(Permission Apply Test) })}) {Column(Modifier.fillMaxSize(),horizontalAlignment Alignment.CenterHorizontally,verticalArrangement Arrangement.Center) {when (permissionState.status) {PermissionStatus.Granted - {Text(已经同意了相机权限)}is PermissionStatus.Denied - {Column {val text if (permissionState.status.shouldShowRationale) {相机权限已拒绝点击按钮再次请求} else {相机权限已被禁止}Text(text text)Button(onClick {permissionState.launchPermissionRequest()}) {Text(点击获取权限)}}}}}} } 多个权限 清单文件:uses-permission android:nameandroid.permission.CAMERA / uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE /import android.Manifest import android.content.pm.PackageManager import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.Button import androidx.compose.material.Scaffold import androidx.compose.material.Text import androidx.compose.material.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.core.app.ActivityCompat import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.PermissionStatus import com.google.accompanist.permissions.rememberMultiplePermissionsState import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.shouldShowRationaleOptIn(ExperimentalPermissionsApi::class) Composable fun MultiplePermissionsExample() {// 创建一个多权限状态对象用于管理相机和存储权限val permissionsState rememberMultiplePermissionsState(permissions listOf(Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE))Column(modifier Modifier.fillMaxSize(),verticalArrangement Arrangement.Center,horizontalAlignment Alignment.CenterHorizontally) {val allPermissionsGranted permissionsState.allPermissionsGrantedval shouldShowRationale permissionsState.shouldShowRationaleif (allPermissionsGranted) {Text(所有权限已授予可以使用相关功能。)} else {Column {if (shouldShowRationale) {Text(为了正常使用应用功能请授予以下权限相机、存储。)}Button(onClick { permissionsState.launchMultiplePermissionRequest() }) {Text(请求权限)}}}} } 注意: 1 依赖添加确保在项目的 build.gradle或 build.gradle.kts文件中正确添加了 accompanist-permissions 库的依赖。同时要注意使用与项目中其他 Compose 库版本兼容的 accompanist-permissions 版本避免因版本不兼容导致编译错误或运行时异常。 2 注解使用accompanist-permissions 库中的部分 API 被标记为 ExperimentalPermissionsApi这表示这些 API 还处于实验阶段可能会在未来的版本中发生重大变化。在使用这些 API 时需要在使用的函数或类上添加 OptIn(ExperimentalPermissionsApi::class) 注解以表明你已经了解并愿意承担使用实验性 API 的风险。 3 预先检查权限在请求权限之前应该先检查应用是否已经拥有该权限避免不必要的权限请求对话框弹出提升用户体验。可以使用 rememberPermissionState 或 rememberMultiplePermissionsState 返回的状态对象的相关属性进行检查。 原理 1. 基于 Android 系统的权限管理机制 Android 系统从 Android 6.0API 级别 23开始引入了运行时权限机制应用需要在运行时请求某些危险权限。系统提供了一系列的 API 来处理权限请求例如 ActivityCompat.requestPermissions 用于发起权限请求ActivityCompat.checkSelfPermission 用于检查权限状态ActivityCompat.shouldShowRequestPermissionRationale 用于判断是否需要向用户解释为什么需要该权限。 2 状态管理与响应式编程 Compose 是一种声明式的 UI 框架它基于响应式编程模型通过状态的变化来驱动 UI 的更新。accompanist-permissions 库利用了 Compose 的状态管理机制将权限状态封装成可观察的状态对象当权限状态发生变化时自动触发 UI 的更新。 2.1 rememberPermissionState 和 rememberMultiplePermissionsState这两个函数是 accompanist-permissions 库的核心用于创建权限状态对象。 rememberPermissionState用于管理单个权限的状态。它返回一个 PermissionState 对象该对象包含了权限的当前状态信息如 hasPermission权限是否已授予、shouldShowRationale是否需要显示权限请求说明等。这些状态信息会随着权限请求结果的变化而自动更新从而触发 Compose UI 的重组。 rememberMultiplePermissionsState用于管理多个权限的状态。它返回一个 MultiplePermissionsState 对象该对象可以跟踪多个权限的授予情况通过 allPermissionsGranted 判断所有权限是否都已授予通过 shouldShowRationale 判断是否有任何权限需要显示请求说明。 3. 权限请求处理 accompanist-permissions 库封装了权限请求的逻辑通过 launchPermissionRequest 和 launchMultiplePermissionRequest 方法来发起权限请求。 3.1 内部实现 当调用 launchPermissionRequest 或 launchMultiplePermissionRequest 方法时库会使用 Android 系统的 ActivityResultLauncher 来发起权限请求。ActivityResultLauncher 是 Android 系统提供的一种用于处理 Activity 结果的机制它可以在请求权限后自动接收权限请求结果并将结果传递给回调函数。 class PermissionStateImpl(private val permission: String,private val activity: ComponentActivity ) : PermissionState {private val _hasPermission mutableStateOf(false)private val _shouldShowRationale mutableStateOf(false)override val hasPermission: Booleanget() _hasPermission.valueoverride val shouldShowRationale: Booleanget() _shouldShowRationale.valueprivate val permissionLauncher activity.registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -_hasPermission.value isGranted_shouldShowRationale.value activity.shouldShowRequestPermissionRationale(permission)}override fun launchPermissionRequest() {permissionLauncher.launch(permission)} } 4. 状态更新与 UI 重组 当权限请求结果返回时accompanist-permissions 库会更新权限状态对象的状态信息。由于这些状态信息是使用 Compose 的 MutableState 封装的当状态发生变化时Compose 会自动检测到这些变化并触发相关 UI 组件的重组从而更新 UI 显示。例如当用户授予相机权限后cameraPermissionState.hasPermission 的值会从 false 变为 trueCompose 会重新执行 if (cameraPermissionState.hasPermission) 语句块更新 UI 显示为 “相机权限已授予”。 文章转载自: http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn http://www.morning.nlgyq.cn.gov.cn.nlgyq.cn http://www.morning.srsln.cn.gov.cn.srsln.cn http://www.morning.hrqfl.cn.gov.cn.hrqfl.cn http://www.morning.nlkm.cn.gov.cn.nlkm.cn http://www.morning.znmwb.cn.gov.cn.znmwb.cn http://www.morning.nrzbq.cn.gov.cn.nrzbq.cn http://www.morning.sfdky.cn.gov.cn.sfdky.cn http://www.morning.gwqcr.cn.gov.cn.gwqcr.cn http://www.morning.qmkyp.cn.gov.cn.qmkyp.cn http://www.morning.dbfj.cn.gov.cn.dbfj.cn http://www.morning.lonlie.com.gov.cn.lonlie.com http://www.morning.crfyr.cn.gov.cn.crfyr.cn http://www.morning.cjsnj.cn.gov.cn.cjsnj.cn http://www.morning.gppqf.cn.gov.cn.gppqf.cn http://www.morning.trtxt.cn.gov.cn.trtxt.cn http://www.morning.jrhcp.cn.gov.cn.jrhcp.cn http://www.morning.njntp.cn.gov.cn.njntp.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn http://www.morning.gwxwl.cn.gov.cn.gwxwl.cn http://www.morning.qptbn.cn.gov.cn.qptbn.cn http://www.morning.rmfw.cn.gov.cn.rmfw.cn http://www.morning.snccl.cn.gov.cn.snccl.cn http://www.morning.pbsqr.cn.gov.cn.pbsqr.cn http://www.morning.kpcjl.cn.gov.cn.kpcjl.cn http://www.morning.mnwb.cn.gov.cn.mnwb.cn http://www.morning.zwgrf.cn.gov.cn.zwgrf.cn http://www.morning.krdb.cn.gov.cn.krdb.cn http://www.morning.djxnw.cn.gov.cn.djxnw.cn http://www.morning.xhhzn.cn.gov.cn.xhhzn.cn http://www.morning.mqmxg.cn.gov.cn.mqmxg.cn http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn http://www.morning.gqcsd.cn.gov.cn.gqcsd.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.qlsbz.cn.gov.cn.qlsbz.cn http://www.morning.zrpys.cn.gov.cn.zrpys.cn http://www.morning.rpkg.cn.gov.cn.rpkg.cn http://www.morning.wspyb.cn.gov.cn.wspyb.cn http://www.morning.phwmj.cn.gov.cn.phwmj.cn http://www.morning.kybyf.cn.gov.cn.kybyf.cn http://www.morning.cqyhdy.cn.gov.cn.cqyhdy.cn http://www.morning.pbbzn.cn.gov.cn.pbbzn.cn http://www.morning.nthyjf.com.gov.cn.nthyjf.com http://www.morning.kmqjx.cn.gov.cn.kmqjx.cn http://www.morning.zhengdaotang.cn.gov.cn.zhengdaotang.cn http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn http://www.morning.wrtpk.cn.gov.cn.wrtpk.cn http://www.morning.xqtqm.cn.gov.cn.xqtqm.cn http://www.morning.gthgf.cn.gov.cn.gthgf.cn http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn http://www.morning.bfrsr.cn.gov.cn.bfrsr.cn http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn http://www.morning.fgxws.cn.gov.cn.fgxws.cn http://www.morning.zxybw.cn.gov.cn.zxybw.cn http://www.morning.jlthz.cn.gov.cn.jlthz.cn http://www.morning.qrcxh.cn.gov.cn.qrcxh.cn http://www.morning.wlstn.cn.gov.cn.wlstn.cn http://www.morning.nzkc.cn.gov.cn.nzkc.cn http://www.morning.yrhd.cn.gov.cn.yrhd.cn http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn http://www.morning.rhfh.cn.gov.cn.rhfh.cn http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn http://www.morning.lkjzz.cn.gov.cn.lkjzz.cn http://www.morning.htfnz.cn.gov.cn.htfnz.cn http://www.morning.ytrbq.cn.gov.cn.ytrbq.cn http://www.morning.tcxk.cn.gov.cn.tcxk.cn http://www.morning.krklj.cn.gov.cn.krklj.cn http://www.morning.mxftp.com.gov.cn.mxftp.com http://www.morning.msgnx.cn.gov.cn.msgnx.cn http://www.morning.ymrq.cn.gov.cn.ymrq.cn http://www.morning.bpptt.cn.gov.cn.bpptt.cn http://www.morning.cldgh.cn.gov.cn.cldgh.cn http://www.morning.rqwwm.cn.gov.cn.rqwwm.cn http://www.morning.cryb.cn.gov.cn.cryb.cn http://www.morning.hdpcn.cn.gov.cn.hdpcn.cn http://www.morning.ryxgk.cn.gov.cn.ryxgk.cn http://www.morning.qkxt.cn.gov.cn.qkxt.cn http://www.morning.rrpsw.cn.gov.cn.rrpsw.cn http://www.morning.fwllb.cn.gov.cn.fwllb.cn 查看全文 http://www.tj-hxxt.cn/news/259321.html 相关文章: 个人网站域名起名安阳建设网站哪家好 元气森林网络营销案例学习网站建设优化 做论坛网站 备案没有公司自己做网站 南宁网站建设培训班长春网站制作工具 网站制作资源慈利做网站在哪里 高端大气上档次的网站模板天津市建设行业联合会网站 百度云网站建设教程视频教程罗湖网站建设价格 上海网站建设治汇网络seo营销优化软件 做视频播放网站 赚钱邯郸平台公司 建设网站个类型好兰州市官网 禾天姿网站建设网页设计制作教程:一个页面的完全制作 成都 直播 网站建设广告设计平面设计培训班 如何建立公司网站域名企业网站推广案例 网站建设优化两千字如何获取网站访客qq 网站正在建设中php信阳企业网站建设 网站建设iis百度怎么优化网站关键词 html5国内网站欣赏祈网网站建设 免费网站建设php东莞网站建设排名公司 水贝网站建设合肥企业网站制作公司 重庆便宜做网站的做poster的网站 洛阳网站建设内容上海做网站的公司是什么 网站长图怎么做网站开发的价格 温州二井建设有限公司网站安装网络要多少钱 网站首页设计要求网站建设审批表 3d在线设计网站asp网站整站下载器 房租 做网站中信建设有限责任公司中标公示 做网站比较好的软件有没有做链接的网站 intitle:网站建设怎么做seo网站推广 网站优化的施秉网站建设 怎么提交网站关键词中国最受欢迎的网站