Android手机间通讯工具——原理篇

IAMP

阅读本文大约需要5分钟

背景

在移动端测试过程中,我们经常会涉及到设备间信息的传输,而在自动化测试热潮的席卷下,是否也有可能让设备之间的新消息交换实现自动化,进一步解放双手呢?

当然,只有想不到的,没有做不到的。

比如以下情景,你能想到多少种解决方案呢?

手机A给手机B拨打了一个电话,要求手机B接收到电话时,求计算出从A拨出电话到B接收到电话的时间延迟。

解决方案

方案一:人工检查,记录A拨打电话的时间T1,及B收到电话的时间T2,人工通过计算T1-T2得出结果。可精确到秒,精确度不高,且人力干预,成本最高。

方案二:自动化检查,A开启短信监听,A拨打电话时,自记录拨打时间T1;B接收到电话时,发送短信至A通知其已接收到电话的时间T2;A收到短信后提取时间T2,自动通过计算T1-T2得出结果。可精确到毫秒,但存在短信收发延时误差,且短信成本较高。

方案三:自动化检查,既然短信成本高,且经常存在延时误差,是否存在一种替代短信的方式呢?在QQ、微信等第三方社交应用风靡的当下,短信通讯早已逐渐被取代,这里当然也可以通过第三方应用来取代方案二中的短信通知。监听新消息的问题不大,开启Accessibility之后监听通知栏新消息的关键字即可(原理同微信红包助手)。但问题来了,测试前需要先登录账号,并互加好友都是必要条件。据了解,已存在的主流第三方社交应用,发送信息的API并没有开放,如果模拟人手操作,点开应用,找到对方账号,编写好信息内容,点击发送,这将又是一个不大简洁、便利的过程,且需要一定的耗时,影响结果准确性。

方案四:依然自动化检查,既然已有的第三方通讯工具调用都比较麻烦,我们是否能够编写自己的通讯工具呢?通过调用自定义的接口,实现信息传递,简化传递过程,减少信息发送过程的误差,增加结果准确性。答案当然是可以的。

方案对比

由以上四种递进方案中,可知方案四是最优的方案。那实现手机间通讯有什么方式呢?最主流的有 wifibluetooth 两种,这两种方式各有千秋,下面我们通过表格来对比两者的优缺点:


方式 精度 费用 稳定性 同时通讯设备数 服务端
wifi ms 较低 较稳定 n 独立服务器
bluetooth ms 免费 很稳定 2 客户端本身

方案选择

由上表可知,wifi最大的优点是支持多台设备同时通讯;而bluetooth相对于wifi,不需要付流量费,本身既可以当客户端又可以当服务端使用,无需额外的服务器,且连接非常稳定,几乎不会无故掉线;而wifi通讯则受网络稳定性影响较大。综上所述,若同时通讯设备数≥3,则只能选择wifi方式,其他情况选择bluetooth方式较为明智。

功能预览

以下为蓝牙及wifi实现方式的功能预览图:

IAMP功能预览

源码链接

本文仅先介绍Android手机间通讯工具的实现原理,源码可到GitHub上获取,后续将增加源码解析篇,敬请期待。