Kotlin高仿微信-第7篇-主页-动态权限申请

news2025/1/19 8:17:06

 Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。

Kotlin高仿微信-项目实践58篇,点击查看详情

效果图:

实现代码:

private fun handlePermission(){
    var permissions = arrayOf(
        Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO,
        Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.READ_PHONE_STATE)

    var isGranted = true
    for (i in permissions.indices){
        var permission = permissions[i]
        if(!checkPermission(permission)){
            isGranted = false
            break
        }
    }

    if(!isGranted){
        requestPermissions(permissions, 88)
    }
}

fun checkPermission(permission: String) :Boolean {
    return ContextCompat.checkSelfPermission(WcApp.getContext(), permission) == PackageManager.PERMISSION_GRANTED
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray ) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if(requestCode == 88 && grantResults != null && grantResults.size > 0){
        (fragments.get(TAB_WECHAT) as WeChatFragment).refresh()
        (fragments.get(TAB_CONTACTS) as ContactsFragment).refresh()
        (fragments.get(TAB_ME) as MeFragment).refresh()
        processNotification()
    }
}


/**
 * 判断手机通知栏是否启用, 如果不启用,跳转到页面开启
 */
private fun processNotification(){
    var account = DataStoreUtils.getAccount()
    TagUtils.d("viewpager是否启用:${ChatNotificationUtils.isNotificationEnabled()}")
    if(!TextUtils.isEmpty(account) && !ChatNotificationUtils.isNotificationEnabled()){
        NotificationSettingMsg().showNotificationSetting(requireActivity(), viewpager_container_root, false, object : BasePopupWindow.IOnDismissListener{
            override fun onDismiss() {
                //
            }
        })
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指定牛导|肿瘤专业医生芝加哥大学博士后实现夙愿

Q医生有个愿望&#xff0c;希望拜师在牛导麾下&#xff0c;利用国家留学基金委2年博士后的机会&#xff0c;真正做出科研成果&#xff0c;发表高质量文章。为此列出了合作导师标准并指定了几位教授。经过团队努力&#xff0c;我们终于为其达成夙愿—获得指定牛导的博士后邀请函…

Redis实战之缓存:查询、添加缓存、更新缓存、缓存预热、缓存穿透、缓存雪崩、缓存击穿 解决方案及实例代码

缓存 什么是缓存? 缓存(Cache), 就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。 为什么要使用缓存&#xff1f; 缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器…

SpringBoot利用Spring SPI机制实现自动按顺序加载注册JavaBean到容器中

前言&#xff1a; 1、SPI机制(Service Provider Interface)&#xff0c;服务提供接口&#xff0c;主要是用来解耦&#xff0c;资源文件目录下的 \resources\META-INF\spring.factories 我们把它归纳为Spring为我们提供的SPI机制&#xff0c;通过这种机制&#xff0c;我们可以在…

docker 容器原理分析笔记(下)

目录 chroot rootfs Volume&#xff08;数据卷) 打包一个go镜像 总结 chroot 当一个容器被创建的时候&#xff0c;我们希望容器中进程看到的文件是一个独立的隔离环境&#xff0c;我们可以在容器进程重启之前挂载整个根目录 /,由于 Mount Namespace 的存在&#xff0c;这…

发布 .NET MAUI / MAUI Blazor 应用 (1) - Windows

发布用于Windows的 .NET MAUI 应用 打开 PowerShell 终端 , 命令行进入工程目录,以我的例子工程为例, cd BlazorMaui BlazorMaui 替换为你自己工程名字 New-SelfSignedCertificate -Type Custom -Subject "CNBlazorMaui" -KeyUsage DigitalSignature -FriendlyName &…

python如何将日期字符串格式化年月日

今天用Python的DataFrame处理数据时&#xff0c;相对一波数据按日期分组处理&#xff0c;但是原始数据包含时间分秒&#xff0c;无法按日期分组&#xff0c;因此需要先将数据转成只包含年月日的数据格式。但是写代码处理过程中发现有点绕&#xff0c;不熟悉的同学容易绕晕。这种…

编程语言如何推动DeFi成为主流?

随着DeFi的快速增长&#xff0c;提供DeFi服务的平台和产品也如雨后春笋般纷纷冒头。作为衡量DeFi协议管理资金规模的标准之一&#xff0c;DeFi“总锁仓量”在过去两年一路从100亿美元增长到超400亿美元&#xff0c;期间更是一度冲上1800亿美元的巅峰。但直到今天&#xff0c;智…

Python爬虫request模块的get、post方法应用

目录 post方法使用 一、确定爬取网站的数据 二、分析数据类型和相应类型 三、使用requetst模块方法进行爬取 四、源代码分享 get的方法使用 一、分析抓取网站操作 二、参数的分析和组成 三、使用get模块方法进行爬取结果 四、源代码分享 思考和总结 参考网站 爬虫是…

MySQL---触发器详解

目录 一、触发器的介绍 二、触发器的语法 &#xff08;1&#xff09;insert触发器 &#xff08;2&#xff09;update触发器 &#xff08;3&#xff09;delete触发器 一、触发器的介绍 触发器是与表有关的数据库对象&#xff0c;指在insert/update/delete 之前或之后&…

4-UI自动化-selenium三大等待操作

4-UI自动化-selenium三大等待方式selenium三大等待方式强制等待timd.sleep隐式等待implicitly_wait显式等待WebDriverWait显式等待和隐式等待的区别上篇介绍了3-UI自动化-八大元素定位&#xff0c;xpath定位方式和相关的常问面试题 本篇来学习三大等待方式 ♡\color{red}{\hear…

如何用蓝牙实现无线定位(一)--系统原理

1. 简介 本项目将利用多个BLE4.0蓝牙模块&#xff0c;配合主控板、OLED显示屏等&#xff0c;构建一个无线定位系统。 本项目的系统构成为&#xff1a;3个信号塔&#xff0c;1个中控台&#xff0c;2个被定位的目标。 无线定位的用途有很多。比如&#xff0c;我们可以把固定的目…

zabbix拓扑图和聚合图形

目录 一、环境准备 1、搭建zabbix基础环境 2、创建被监控主机 二、拓扑图 1、拓扑图作用 2、拓扑图绘制步骤 三、聚合图形 1、聚合图形的作用 2、创建聚合图形 一、环境准备 1、搭建zabbix基础环境 zabbix基础环境部署参照&#xff1a;zabbix基础环境部署_桂安俊kyli…

方格取数 (两条路径,使得取得的数字和为最大)

设有 NN 的方格图&#xff0c;我们在其中的某些方格中填入正整数&#xff0c;而其它的方格中则放入数字0。如下图所示&#xff1a; 某人从图中的左上角 A 出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&#xff0c;直到到达右下角的 B 点。 在走过的路上&#xff0…

Vue中的组件生命周期

一个组件从创建到销毁的过程 成为生命周期。 在我们使用Vue3 组合式API 是没有 beforeCreate 和 created 这两个生命周期的 组件生命周期如下&#xff1a; onBeforeMount() 在组件DOM实际渲染安装之前调用。在这一步中&#xff0c;根元素还不存在。onMounted() 在组件的第一次…

【手把手】教你玩转SpringCloud Alibaba之Sentinel整合GateWay

1、网关流控介绍 在微服务系统中&#xff0c;网关提供了微服务系统的统一入口&#xff0c;所以在做限流的时候&#xff0c;肯定是要在网关层面做一个流量的控制&#xff0c;Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 Sentinel 1.6.0 引入…

R语言隐马尔可夫模型HMM识别不断变化的市场条件

了解不同的市场状况如何影响您的策略表现可能会对您的收益产生巨大的影响。最近我们被客户要求撰写关于隐马尔可夫模型的研究报告&#xff0c;包括一些图形和统计输出。 某些策略在波动剧烈的市场中表现良好&#xff0c;而其他策略则需要强劲而平稳的趋势&#xff0c;否则将面…

【PdgCntEditor】解决PDF的目录页码和PDF实际页码不一致的问题,书签页码偏移页面偏移功能,PDF页面标签的添加

一、问题背景 大部分的图书对应的PDF&#xff0c;目录中的页码并非PDF中直接索引的页码&#xff0c;两者之间存在一定的偏移值&#xff1b;导致我们看目录后面的页码&#xff0c;并不能直接借此数字索引到对应页面&#xff0c;非常麻烦。 二、改变页码标签 这是第一种方法&…

电脑技巧:Win10粘贴文件到C盘提示没有权限的解决方法

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

VMware升级手册

1. 概述 1.1 实施范围 本次实施涉及上海SMVIC虚拟化平台的7台物理服务器、7台ESXI节点、一台VC(6.7升级到7.0),以及广德、如皋两个集群迁移到7.0VC。 1.2 实施内容 本项目中需要实施内容包括: 2. 前置准备 升级确认: 3. WBS 4. 实施过程 4.1 VC部署 运行安装包,点击…

R语言生存分析数据分析可视化案例

目标 本文的目的是对如何在R中进行生存分析进行简短而全面的评估。关于该主题的文献很广泛&#xff0c;仅涉及有限数量的&#xff08;常见&#xff09;问题。最近我们被客户要求撰写关于生存分析的研究报告&#xff0c;包括一些图形和统计输出。 可用的R包数量反映了对该主题的…