最近在做了一个新项目,涉及Windows主机与Android设备的通信与数据交互。
当Windows端需要向Android端推送数据或指令时,我给出的解决方案是通过adb命令发送broadcast的方法来通知Android。
adb shell am broadcast -a <广播的action> --es <数据key> <数据value>
这种方案可以解决Windows->Android的单方向通信,但是无法解决Android->Windows的通信。比如当收到某条来自Windows的指令时,Android如何给出确认回复呢?
这是我想到了SystemProperties类,它是Android中的系统属性管理类。选择它的原因是因为它也可以用adb命令来读写。
adb shell getprop <数据key> //获取数据
adb shell setprop <数据key> <数据value> //写入数据
如此一来,Windows端可以写一个线程专门循环通过adb读取Android端的指定属性,然后当Android需要向Windows传递信息的时候,就将约定好的值写入,这样Windows就能读取到了。此时Android->Windows的通信也就完成了。
ps:1、需要注意的是,adb shell setprop 指令需要root权限才能写入,但是读取的时候不需要root权限。
2、adb shell setprop 写入的属性不是永久保存的,当Android设备重启后,就会消失。