android 局域网 发现,局域网内android设备发现及通讯
最近一个项目需要实现在局域网内android手机操控另一个没有显示屏的android设备(音箱),具体实现就是手机端向音箱端发送命令字符串,音箱端通过解析命令字符串来完成操作,而手机端也要实时显示音箱当前的状态(正在播放什么歌曲之类的信息),这样就需要两边的交互要具有稳定性和快捷性,不然用户体验就会非常差。博主替换了三套方案终于在稳定性和快捷性上基本达到要求,下面来简单说下这三套方案。第一套方案采
最近一个项目需要实现在局域网内android手机操控另一个没有显示屏的android设备(音箱),具体实现就是手机端向音箱端发送命令字符串,音箱端通过解析命令字符串来完成操作,而手机端也要实时显示音箱当前的状态(正在播放什么歌曲之类的信息),这样就需要两边的交互要具有稳定性和快捷性,不然用户体验就会非常差。
博主替换了三套方案终于在稳定性和快捷性上基本达到要求,下面来简单说下这三套方案。第一套方案采用的是高通提供的aoojoyn框架,aoojoyn提供了一整套的局域网内设备互相发现以及通讯的功能,但是稳定性很差,经常会出现发现不了的情况,特别是在apk运行中切换网络后通常很难再互相发现,由于aoojony的资料太少以及想彻底解决这个问题需要花费大量的时间和精力,所以就放弃了这套方案。第二套方案是基于udp广播,通过手机端先发送全局广播,广播中携带了手机端的ip地址信息,音箱端接收到全局广播后向手机端所在的ip发送广播,手机端接收到音箱端发送的广播后也改为向音箱的ip发送广播,这样就实现了发现和通讯,这个方案虽然稳定性和速度比aoojoyn都提高了很多,但是也有问题,首先稳定性还是不够还是会有一段时间接收不到广播,其次手机端和音箱端的通讯很频繁,2秒一次,当udp广播发送太多后路由就会瘫痪,所以这套方案也不行。第三种是udp和socket组合,先通过udp来知道手机端和音箱端的ip地址,再通过socket来进行通讯,当手机端在连接后接收不到音箱端的心跳时就再发送udp全局广播,音箱端就会重启socket,这样稳定性和快捷性就大大提升了,也不会对路由器造成负担。
写的很乱,请见谅。
更多推荐
所有评论(0)