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

网站建设app开发海南新政策最新

网站建设app开发,海南新政策最新,童装网站建设目标,广西十佳旅游景区在 Android 开发中,动态权限管理是一个常见的需求,尤其是在高版本 Android 系统中,权限管理变得更加严格和复杂。为了简化权限申请的流程,减少重复代码,本文将介绍如何使用 Kotlin 封装一个高效、易用的权限工具类。 权…

在 Android 开发中,动态权限管理是一个常见的需求,尤其是在高版本 Android 系统中,权限管理变得更加严格和复杂。为了简化权限申请的流程,减少重复代码,本文将介绍如何使用 Kotlin 封装一个高效、易用的权限工具类。


  1. 权限工具类封装

    • 检查权限
    • 请求权限
    • 处理权限请求结果
    • 显示权限请求理由
    • 跳转到应用设置
  2. 使用示例

    • 在 Activity 中使用
    • 在 Fragment 中使用
  3. 适配高版本 Android

    • Android 12 及以上版本的权限适配
    • 后台权限处理
  4. 扩展功能

    • 批量检查权限
    • 自动处理权限请求理由

回调接口定义
定义一个回调接口,用于返回权限请求的结果。

interface PermissionResultCallback {fun onPermissionsGranted() // 所有权限已授予fun onPermissionsDenied()  // 部分或全部权限被拒绝
}

权限工具类封装

将权限相关的逻辑封装在工具类 PermissionUtils 中。

import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.provider.Settings
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.ActivityResultRegistry
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.lifecycle.LifecycleOwnerobject PermissionUtils {/*** 请求权限** @param lifecycleOwner LifecycleOwner(Activity 或 Fragment)* @param registry ActivityResultRegistry* @param permissions 需要请求的权限数组* @param callback 权限请求结果回调*/fun requestPermissions(lifecycleOwner: LifecycleOwner,registry: ActivityResultRegistry,permissions: Array<String>,callback: PermissionResultCallback) {val launcher = registry.register("permission_request_key", // 唯一的 keylifecycleOwner,ActivityResultContracts.RequestMultiplePermissions()) { results ->if (results.all { it.value }) {// 所有权限已授予callback.onPermissionsGranted()} else {// 部分或全部权限被拒绝callback.onPermissionsDenied()}}// 启动权限请求launcher.launch(permissions)}/*** 检查单个权限是否已授予** @param permission 需要检查的权限* @return 是否已授予*/fun Context.isPermissionGranted(permission: String): Boolean {return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED}/*** 检查多个权限是否已全部授予** @param permissions 需要检查的权限数组* @return 是否全部已授予*/fun Context.arePermissionsGranted(permissions: Array<String>): Boolean {return permissions.all { isPermissionGranted(it) }}/*** 显示权限请求理由弹窗** @param permission 需要请求的权限* @param message 弹窗提示信息* @param onRequestAgain 用户点击“确定”后的回调*/fun Activity.showPermissionRationale(permission: String,message: String,onRequestAgain: () -> Unit) {AlertDialog.Builder(this).setTitle("Permission Required").setMessage(message).setPositiveButton("OK") { _, _ -> onRequestAgain() }.setNegativeButton("Cancel", null).show()}/*** 跳转到应用设置页面*/fun Activity.openAppSettings() {val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {data = Uri.fromParts("package", packageName, null)}startActivity(intent)}
}

3. 在 Activity 中使用
Activity 中调用工具类,并实现回调接口。

import android.Manifest
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivityclass MainActivity : AppCompatActivity(), PermissionResultCallback {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 定义需要请求的权限val permissions = arrayOf(Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE)// 检查权限是否已授予if (PermissionUtils.arePermissionsGranted(this, permissions)) {onPermissionsGranted()} else {// 请求权限PermissionUtils.requestPermissions(this, // LifecycleOwneractivityResultRegistry, // ActivityResultRegistrypermissions,this // PermissionResultCallback)}}override fun onPermissionsGranted() {// 权限已授予的逻辑Toast.makeText(this, "All permissions granted!", Toast.LENGTH_SHORT).show()}override fun onPermissionsDenied() {// 权限被拒绝的逻辑Toast.makeText(this, "Some permissions denied!", Toast.LENGTH_SHORT).show()}
}

4. 在 Fragment 中使用
Fragment 中调用工具类,并实现回调接口。

import android.Manifest
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.fragment.app.Fragmentclass MyFragment : Fragment(), PermissionResultCallback {override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)// 定义需要请求的权限val permissions = arrayOf(Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE)// 检查权限是否已授予if (PermissionUtils.arePermissionsGranted(requireContext(), permissions)) {onPermissionsGranted()} else {// 请求权限PermissionUtils.requestPermissions(viewLifecycleOwner, // LifecycleOwnerrequireActivity().activityResultRegistry, // ActivityResultRegistrypermissions,this // PermissionResultCallback)}}override fun onPermissionsGranted() {// 权限已授予的逻辑Toast.makeText(requireContext(), "All permissions granted!", Toast.LENGTH_SHORT).show()}override fun onPermissionsDenied() {// 权限被拒绝的逻辑Toast.makeText(requireContext(), "Some permissions denied!", Toast.LENGTH_SHORT).show()}
}

5. 总结
工具类封装:将权限检查、请求、弹窗和设置跳转逻辑封装在 PermissionUtils 中。

**回调机制:**通过 PermissionResultCallback 接口返回权限请求结果。

**灵活调用:**支持在 ActivityFragment 中调用工具类。

通过这种方式,代码结构清晰,逻辑复用性强,且与 Activity 和 Fragment 解耦。如果有其他需求或问题,欢迎继续讨论!


文章转载自:

http://JgNff3DG.zypnt.cn
http://RdzGLNNJ.zypnt.cn
http://RTaXCXt7.zypnt.cn
http://HOsL5en5.zypnt.cn
http://uGLZC0O3.zypnt.cn
http://WJYiCFgw.zypnt.cn
http://x8spNAYR.zypnt.cn
http://rlVJHvPo.zypnt.cn
http://NYQ9CrBW.zypnt.cn
http://hgQ6qf8C.zypnt.cn
http://bu0lT7f9.zypnt.cn
http://mnAP9aAr.zypnt.cn
http://lzw3nKxj.zypnt.cn
http://E8Mn0QtB.zypnt.cn
http://2cYWOGdc.zypnt.cn
http://Wi4nAdEU.zypnt.cn
http://49zpjdd7.zypnt.cn
http://jttJmtVZ.zypnt.cn
http://isxEc323.zypnt.cn
http://ys4O7s2L.zypnt.cn
http://Qo0UN28q.zypnt.cn
http://wLpNEPK0.zypnt.cn
http://6lABx715.zypnt.cn
http://qhsATwcA.zypnt.cn
http://J9t9Es6z.zypnt.cn
http://B1VEppvJ.zypnt.cn
http://J37ocle8.zypnt.cn
http://xykkjAyd.zypnt.cn
http://Pop8EiLZ.zypnt.cn
http://0GApq3OJ.zypnt.cn
http://www.dtcms.com/wzjs/624812.html

相关文章:

  • 关于公示网站建设的计划书主题公园网站建设
  • 山东建设厅官方网站名人朋友圈网页版qq登录入口
  • 奉贤网站建设推广wordpress 多语言切换
  • 做网站直播平台企业网站mp4怎么处理
  • 互联网网站备案流程抖音小程序开放平台
  • 加强农业网站建设wordpress xss跨站脚本漏洞
  • 手机上怎么做自己卖菜的网站宁波做网站制作
  • 桐城市住宅和城乡建设局网站西安市建筑工程信息网
  • 深圳网站建设sz886商城 网站有哪些功能模块
  • 和建设银行类似的网站郑州网站策划
  • 银川网站建设实习生域名怎么卖
  • 如何做自己的博客网站网页网络游戏
  • 广东建设工程注册执业中心网站网站建设有哪些常用行为
  • 网站域名跳转代码html南京市溧水城市建设集团网站
  • 成都专业网站建设厂开发者导航
  • 南通网站建设教程2023年百度小说风云榜
  • 怎么建网上商城博山专业网站优化哪家好
  • 外贸公司图片宁波seo优化
  • 企业门户网站设计报告廊坊网页关键词优化
  • 图书网站开发背景苏州企业如何建站
  • 网站推广公司程序员培训机构排名前十
  • 网站建设进什么分录网站建设费与无形资产
  • 网站顶部展出的大幅广告小程序后台开发教程
  • 湖南营销型网站建设流程网页制作和网站开发实验报告
  • html5大气网站建设厅执业资格注册中心网站
  • 做网站需要什么许可证服务器和网站维护
  • 怎么避免网站开发后门西安发布最新通知
  • 做孵化的网站网站服务器多少钱
  • 个人网站能不能做论坛怎么做电商平台
  • 网站建设是系统工程如今做那个网站能致富