Android-通过语音来操作微信
背景: 开车的时候不能去使用微信,如果有很重要的信息需要及时回复就需要等停车。基于上面需要,在车载系统上实现通过语音来操作微信和微信来消息时播报出来。
软件整体架构图如下:

主要模块介绍:
基于AccessibilityService辅助服务实现操作微信
通过OCR解析微信信息
通过VoiceAdapter语音转操作功能(比如:微信发送"haha"给小王)和微信信息播报
TalkingAssistant实现核心逻辑, 管理VoiceAdapter和Wechat的交互
软件整体架构图如下:
主要模块介绍:
基于AccessibilityService辅助服务实现操作微信
通过OCR解析微信信息
通过VoiceAdapter语音转操作功能(比如:微信发送"haha"给小王)和微信信息播报
TalkingAssistant实现核心逻辑, 管理VoiceAdapter和Wechat的交互
实现开发中碰到以下问题:
1. 微信对辅助服务做了防御,通过辅助服务读取微信某些view时,微信会自动崩溃。
解决方法:参考之前文章
2. 微信聊天内容框是用的自定义view实现,无法通过辅助服务获取到聊天内容。
解决方法:之前做安全沙箱,宿主是显示插件的notification是将notification的view转换成bitmap再显示。此处参考上面方法,通过将自定义view转换成bitmap,然后使用OCR来将图片转文字。
ps:辅助服务不支持dump view action,需要修改辅助服务源码来支持。
3.微信默认设置时竖屏
解决方法:需要在PMS解析package时,针对微信做修改。屏蔽微信在activity里调用setRequestOrientation.
4.如何保证微信更新后,功能继续work?解决方法:辅助服务是通过view id来实现对特定view进行操作的,微信更新时如果出现view id变化则同步更新view id给TalkingAssistant。如果不仅仅是view id变化则需要同时更新解析策略(类似热修复方法,从服务器push最新策略代码)。
结果:此项目demo运行ok, 支持通过语音去操作微信和将微信收到文本信息播报出来。