微信消息语音播报秒实现

devtools/2024/10/25 16:14:45/

1. 监听系统消息通知

注册一个监听系统消息的服务

<serviceandroid:name=".MyNotificationListenerService"android:exported="true"android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" ><intent-filter><action android:name="android.service.notification.NotificationListenerService" /></intent-filter></service>

实现这个服务,解析消息通知,如果是来自微信,则组装成微信消息,提取发送者,和消息内容,更新到livedata中

class MyNotificationListenerService : NotificationListenerService() {companion object{val wxMessage = MutableLiveData<WxMessage>()}override fun onNotificationPosted(sbn: StatusBarNotification) {// 捕获通知val notification = sbn.notification// 根据用户设置过滤通知println("linlian ${sbn.packageName},${sbn.notification.tickerText}")if (PACKAGE_WX == sbn.packageName) {convertToWxMessage(sbn)?.let {wxMessage.postValue(it)}}}/*** 将微信消息转换成发送者,和消息内容*/private fun convertToWxMessage(sbn: StatusBarNotification): WxMessage? {try {sbn.notification.tickerText?.let {val splits = it.split(delimiters = arrayOf(":"),ignoreCase = false,limit = 2)if (splits.size == 2) {return  WxMessage(splits[0], splits[1])}}} catch (e: Exception) {e.printStackTrace()}return null}
}

怎么启动这个消息监听服务呢

  /*显示设置界面,运行我们的应用监听服务*/private fun startNotificationSetting() {startActivity(Intent(ACTION_NOTIFICATION_LISTENER_SETTINGS));}

这时候会启动系统设置界面,我们需要允许我们的应用

如何判断系统是否允许我们监听了呢

 /*** 判断应用是否有权限*/private fun isServiceSettingEnable(): Boolean {var enable = falseval packageName = packageNameval flat: String =Settings.Secure.getString(contentResolver, "enabled_notification_listeners")if (flat != null) {enable = flat.contains(packageName)}return enable}

允许了则直接跳过,不允许的话,启动设置界面,引导用户设置。

2.语音播报

语音播报的话,主要使用TextToSpeech

初始化,设置中文

 tts = TextToSpeech(this) { status ->println("linlian status=$status")if (TextToSpeech.SUCCESS == status) {tts.setLanguage(Locale.CHINESE)}}

监听livedata

wxMessage.observe(this, object : Observer<WxMessage> {override fun onChanged(value: WxMessage) {tts.speak("收到来自${value.sender}的消息,${value.message}",TextToSpeech.QUEUE_FLUSH,null)}})

that's it 


http://www.ppmy.cn/devtools/128718.html

相关文章

FFmpeg 库的简要说明

FFmpeg 库的简要说明&#xff1a; libavutil 功能&#xff1a;提供一系列通用工具函数&#xff0c;旨在简化开发流程。 主要用途&#xff1a; 随机数生成器&#xff1a;用于生成随机数&#xff0c;适用于各种应用。 数据结构&#xff1a;提供常用的数据结构&#xff08;如链表…

[Linux网络编程]04-多进程/多线程并发服务器思路分析及实现(进程,信号,socket,线程...)

一.思路 实现一个服务器可以连接多个客户端&#xff0c;每当accept函数等待到客户端进行连接时 就创建一个子进程; 核心思路&#xff1a;让accept循环阻塞等待客户端&#xff0c;每当有客户端连接时就fork子进程&#xff0c;让子进程去和客户端进行通信&#xff0c;父进程用于…

骨传导耳机哪个品牌好用质量好?2024年五款高性价比骨传导耳机推荐

骨传导耳机是我们日常生活中不可或缺的电子产品之一&#xff0c;无论是为了享受音乐还是运动健身使用都非常的合适&#xff0c;而选择一款好用且质量优秀的骨传导耳机却并不简单。因为市面上的骨传导耳机品牌琳琅满目&#xff0c;各种功能和设计让人眼花缭乱&#xff0c;经常让…

基于RK3588/算能BM1684 AI盒子:综合视频智能AI分析系统建设方案(五)边缘盒子与AI服务器

方案硬件介绍 智能AI分析服务器 机型:2U机架式服务器 处理器&#xff1a;CPU_Xeon_5318Y_2.1GHz_24C_48T_165W*2 内存&#xff1a;32GB DDR4 3200 RDIMM*4 240GB 2.5in&#xff08;SATA SSD&#xff09;*1 硬盘&#xff1a;6 TB, SATA 6Gb/s, 7.2K&am…

《近似线性可分支持向量机的原理推导》 目标函数 公式解析

本文是将文章《近似线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 公式 9-38 解释&#xff1a; min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 C ∑ i 1 N ξ i \min_{w, b, \xi} \quad \frac{1}{2} \|w\|^2 C \sum_{i1}^{N} \x…

Python爬虫:自动化获取商品评论数据

为什么选择Python爬虫API 高效的数据处理&#xff1a;Python的数据处理能力&#xff0c;结合Pandas等库&#xff0c;可以轻松处理和分析大量的评论数据。丰富的库支持&#xff1a;Python拥有丰富的库&#xff0c;如requests用于发送HTTP请求&#xff0c;BeautifulSoup用于解析…

Swift Macro 在业务开发中的探索与实践

简介 Swift Macro 在 Swift 5.9 版本中正式引入&#xff0c;且需配合 Xcode 15 使用。Swift Macro 作为一种新的设计方法&#xff0c;致力于帮开发者降低编写重复代码的繁琐&#xff0c;以更为简洁优雅的方式去实现。 在 OC 中&#xff0c;有大家熟知的宏 #define&#xff0c;…

HarmonyOS第一课——HarmonyOS介绍

HarmonyOS第一课 HarmonyOS介绍 HarmonyOS是新一代的智能终端操作系统&#xff08;泛终端服务的载体&#xff09;&#xff1b; 智慧互联协同&#xff0c;全场景交互体验&#xff1b; 核心技术理念&#xff1a; 一次开发 多次部署&#xff1a; 预览 可视化开发UI适配 事件交…