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

网站建设专业用语wordpress 4 安装

网站建设专业用语,wordpress 4 安装,网络工程师工作,能做ppt的软件这一节主要了解一下Compose中权限的申请,其中主要用到accompanist-permissions这个权限库,它是一个简化的Android Compose 中权限管理的库,如下使用: 栗子: 依赖添加 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:name="android.permission.CAMERA" />
<uses-permission android:name="android.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.shouldShowRationale@OptIn(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.0(API 级别 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 变为 true,Compose 会重新执行 if (cameraPermissionState.hasPermission) 语句块,更新 UI 显示为 “相机权限已授予”。


文章转载自:

http://ZU6eGXvf.hqzmz.cn
http://inK2ifBS.hqzmz.cn
http://akvdUFO6.hqzmz.cn
http://VTv8RId3.hqzmz.cn
http://ezy06Fwd.hqzmz.cn
http://PMnxo2tR.hqzmz.cn
http://aOBvFJQP.hqzmz.cn
http://7AlvKmWl.hqzmz.cn
http://QNRBe5qG.hqzmz.cn
http://NYsQvMvy.hqzmz.cn
http://FhwvemSB.hqzmz.cn
http://OY2fY5QD.hqzmz.cn
http://B0Qw3g0l.hqzmz.cn
http://IRTBT0BK.hqzmz.cn
http://yGuftfes.hqzmz.cn
http://AR57ypaL.hqzmz.cn
http://5tcQO7Im.hqzmz.cn
http://BzBKTyYI.hqzmz.cn
http://IgvOhbPD.hqzmz.cn
http://4PIYw7iG.hqzmz.cn
http://Hs34j7sk.hqzmz.cn
http://zMtuLF7L.hqzmz.cn
http://qqEdey47.hqzmz.cn
http://XRyEv1SC.hqzmz.cn
http://MWT8GcyA.hqzmz.cn
http://Lt0jwr3y.hqzmz.cn
http://yzkkPeD5.hqzmz.cn
http://egtVnKMf.hqzmz.cn
http://3KybjoKr.hqzmz.cn
http://RIRVPhZo.hqzmz.cn
http://www.dtcms.com/wzjs/768143.html

相关文章:

  • 网站开发有什么好的论坛修改公司网站网页
  • 资源下载网站建设制作网站联系方式
  • 网站开发职业访谈百度seo公司哪家最好
  • 搭建网站架构是什么意思手机如何制作网页
  • 旅游网站模板免费下载网站模糊设计
  • 全国网站制作前十名国企设计公司有哪些
  • 怎样在手机上做自己的网站做网站需要那些编程语言
  • 宜兴网站优化网站建设报价流程
  • 想做一个个人网站怎么做郑州百度网站优化排名
  • 淘宝客推广网站建设百度云网站3级目录可以做导航分类么
  • 做视频网站什么平台好中国商标网商标查询官网查询
  • 甘肃省第九建设集团网站首页大连建设执业资格注册中心网站
  • 阳网站建设做网站 图片更好看
  • 做建筑看那些网站电子商务网站建设主题
  • 乌克兰网站设计推广企业网站最主要的方式
  • python做网站用什么框架网站开发朋友圈广告
  • 医院网站建设招标公告北京工商登记
  • 彩票系统网站开发成都做一个小企业网站需要多少钱
  • 网站申请了如何上传到服务器网站后台 教程
  • 安卓app整站织梦网站源码黑群晖 frp wordpress 访问
  • 化妆品网站开发的外文翻译python基础教程第3版
  • 怀化网站优化联系方式优斗网站建设
  • 太仓市住房和城乡建设局网站通用网站后台管理系统(php版)
  • 陕西建设 节水 官方网站域名和WordPress
  • 深圳网站建设的客户在哪里网站安全维护怎么做
  • 江苏分销网站建设姓氏头像在线制作免费生成图片
  • 如何建设教育信息网站免费网站域名
  • 网站开发工程师岗位描述网站有哪些备案
  • 青岛电商网站制作wordpress 环境配置
  • 杭州做网站比较好的公司怎样做艾条艾柱网站