我们谈谈技术,当然,主要也是给自己做的应用打打广告,谢谢大家支持,下载用用,提提意见。先上个二维码,感兴趣的现在就可以去看看:
点击下载方便聊,下方二维码扫描直接下载
说说初衷
一个月之前,朋友给我说了一个很有意思的需求:
在骑单车的时候(开车同理,反正就是手没空的场景),希望能够来了微信消息能够语音朗读出来(如果是语音就自动播放),然后啊,这时候如果带了耳机,能够用耳机的按键来发送微信语音消息。
这个听起来好像还有点意思,从技术的角度来说应该很好实现,哈哈,马上搜一搜有没有这方面的应用,结果当然是没有,不然也没有这篇文章了
能听会说
这个应用做出来,主要就两个功能,一个词形容:能听会说。首先来看看听,微信用耳机来发送语音,其实啊,这个功能微信团队也想到了,然后在iOS的微信是可以开启这个功能的:
- 首先要在微信通讯录里找到“微信团队”这个帐号,向该账号发送kqej,即“开启耳机”的四字的首字母,就能开启微信的耳机录音功能。发送“gbej”即能关闭微信耳机录音功能
- 微信耳机录音功能开启后,按一下耳机线上的播放/暂停键(增减音量中间的空白部分)后就可以说话。这时,屏幕上也会显示开始录音的标识。说话结束后,再按一次播放/暂停键,刚才记录的语音就会发送出去。
- 当然,用iPhone耳机发送语音并不会自动播放他人发过来的消息。它的方便之处在于解放了你的双手,在你不方便的时候再不用举着手机说话。
然后我试了一下,iOS 11.2.5 微信6.6.3开启失败,得到的回复是你的微信版本不支持微信耳机功能。
当然,iOS不是我们现在讨论的主要内容,我们来看看Android,很遗憾,微信官方并没有这个功能,其实这个实现的难度主要还是在硬件,苹果的耳机是可以按下按键的同时接收麦克风语音的,但是大部分Android的耳机并不可以,一按下按键就没办法使用麦克风。况且要从外部控制微信的语音按钮也是个问题,所以听 这个功能暂时就搁置了,还是先从简单的来,后面再慢慢研究这个。正在看文章的你有没有什么好办法呢?
说出消息
通知栏读取
说消息这个主要就是消息的解析,最简单的一种方案是读取通知栏,这个方案不仅是微信,所有具有通知权限的应用消息都可以读出来,怎么来实现呢,Android从4.4API19之后提供了一个类NotificationListenerService,在用户手动开启了通知栏读取权限之后,可以在这个服务类中获取所有的通知栏消息,并且还可以控制,夸张一点说,只要用户同意了之后,手机上的所有通知消息你想怎么处理就怎么处理。当然,这里面有好多坑,也有一些致命的问题。你可以下载应用试试,可能会遇到,我再告诉你。
辅助功能(无障碍)
通知栏读取很方便,但是你会说,我开了免打扰怎么办,或者说我隐藏了消息具体内容怎么办,这就是个问题了,而且微信还有语音消息,最好能够自动播放......
这个怎么来解决呢,想要实现这个,在手机不root的情况只有一个办法,那就是使用辅助功能(有的手机叫无障碍),这个功能主要是用来获取当前界面的所有控件和内容,还可以模拟点击,现在市面上大部分抢红包插件也是用的这种方法。这个类叫AccessibilityService,在用户同意了权限之后,就可以获取当前打开界面的所有信息(注意是所有界面,不限于微信)。
微信消息读取
上面说到可以读取当前界面的所有消息是应用不做特殊处理的情况下,那微信的消息可以直接读取么?很遗憾,答案是不能,不得不说,微信安全这方面确实做了很多考虑,怎么实现的我还是很好奇,有没人知道呢?我还试了QQ,QQ是可以直接读聊天内容的,也不知道QQ的需求大不大?如果需求大的话后面加进去。
那要读到微信消息怎么办呢,在苦思冥想,挠破头皮之后只想到一个笨办法,那就是长按消息之后复制,再读取剪贴板的内容。既然叫笨办法,那肯定是有很多缺陷的,最大的缺陷就是这个不太稳定,容易复制失败,这时候往往需要手动去长按复制一下或者点击一下消息再开启才会生效。
隐私问题
上面说的这些有没有吓到不是开发者的读者呢?如果是我我也会觉得这有点可怕,可以读到你当前打开的所有内容,想想都吓人......但是你放心,上面提到的两个功能,一个是通知栏权限,一个是辅助功能权限,这两个功能必须手动允许,而且在应用被杀死之后大部分系统会自动关闭,你只需要谨慎的开启就好,比如方便聊这个应用,完全没必要担心这个问题,理论上它关闭网络也能用的,联网只是语音sdk需要联网,应用本身是不会存储任何内容的,您完全放心下载使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。