微信消息语音播报秒实现

1. 监听系统消息通知

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

复制代码
<service
            android: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中

Kotlin 复制代码
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

    }
}

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

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

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

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

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

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

2.语音播报

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

初始化,设置中文

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

监听livedata

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

        })

that's it

相关推荐
s1ckrain5 分钟前
【论文阅读】Editing Large Language Models: Problems, Methods, and Opportunities
论文阅读·人工智能·语言模型·大模型可解释性
勤奋的小笼包7 分钟前
论文阅读笔记:《Dataset Condensation with Distribution Matching》
论文阅读·人工智能·笔记
RTC老炮1 小时前
webrtc弱网-QualityScaler 源码分析与算法原理
人工智能·算法·webrtc
旧时光巷2 小时前
【机器学习③】 | CNN篇
人工智能·pytorch·python·机器学习·cnn·卷积神经网络·lenet-5
Godspeed Zhao4 小时前
自动驾驶中的传感器技术13——Camera(4)
人工智能·机器学习·自动驾驶·camera·摄像头
Godspeed Zhao4 小时前
自动驾驶中的传感器技术6——概述(6)-GNSS
人工智能·机器学习·自动驾驶·gnss·导航定位
caijingshiye5 小时前
BitMart 启动中文品牌“币市”:引领加密资产本地化发展新篇章
人工智能·区块链
视觉语言导航6 小时前
中科院自动化所机器人视觉中的多模态融合与视觉语言模型综述
人工智能·深度学习·机器人·具身智能
SickeyLee7 小时前
产品经理的成长路径与目标总结
大数据·人工智能
叫我:松哥7 小时前
python案例:基于python 神经网络cnn和LDA主题分析的旅游景点满意度分析
人工智能·python·神经网络·数据挖掘·数据分析·cnn·课程设计