Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 232|回复: 0

处理运行时权限请求

[复制链接]

347

主题

501

帖子

3066

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3066
发表于 2025-8-18 11:19:01 | 显示全部楼层 |阅读模式
  1.     private ActivityResultLauncher<String> mPermissionResult = registerForActivityResult(
  2.             new ActivityResultContracts.RequestPermission(),
  3.             result -> {
  4.                 if (result) {
  5.                     if (intent !=null){
  6.                         MainActivity.this.startActivity(intent);
  7.                     }
  8.                     SpeechApp.initializeMsc(MainActivity.this);
  9.                 }
  10.             });
复制代码

代码详解
这段代码是使用Android新的Activity Result API来处理运行时权限请求的实现:
主要组成部分
ActivityResultLauncher声明
private ActivityResultLauncher<String> mPermissionResult:声明一个ActivityResultLauncher,用于处理权限请求结果
泛型<String>表示输入类型为字符串(权限名称)
registerForActivityResult注册
使用ActivityResultContracts.RequestPermission()契约来请求单个权限
传入回调函数处理权限请求结果
回调逻辑
result -> {...}:Lambda表达式处理权限请求结果
result参数是布尔值,表示用户是否授予了权限
如果权限被授予:
检查intent是否不为空,不为空则启动对应的Activity
调用SpeechApp.initializeMsc(MainActivity.this)初始化语音服务, MainActivity.this 是 Context类的实例

工作流程
当用户点击某个功能按钮时(如语音转写、语音合成等)
调用isPrivacyConfirm()方法检查隐私政策是否已同意
如果已同意,则通过mPermissionResult.launch(Manifest.permission.RECORD_AUDIO)请求录音权限
用户授权后,此回调会被触发,根据授权结果执行相应操作
优势
使用新的Activity Result API替代了传统的onRequestPermissionsResult()方法
代码更简洁,逻辑更清晰
避免了复杂的requestCode管理

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-9-17 22:51 , Processed in 0.013001 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表