使用BLE进行与客户端/服务器的双向通信

时间:2014-05-20 06:10:37

标签: android bluetooth-lowenergy android-bluetooth

我们假设我在他们各自的设备AB上有两个用户androidAandroidB。我希望两者都能够打开一个应用程序,按下该应用程序中的一个按钮,该按钮启动BLE,然后每个按钮发送另一个user_id。因此,androidA收到bandroidB收到a。我知道这可能通过回调发生,并且我可以通过单向通信实现这一点。也就是说,我可以将androidB作为外围设备,androidA作为中心,因此a会收到user_id的{​​{1}}。

双向沟通是否可行?如果没有,等待回调是否明智,一旦回调发生,他们切换角色?在这方面,我只需要检查以确保当b获得androidA范围内的回调时androidB也会得到某种响应来执行操作。

2 个答案:

答案 0 :(得分:1)

实际上,在Android中无法实现双向通信。只有它才能读取广告包。所以你需要一些其他设备来传输BLE广告包,这些设备可以是estimote,radiusnetwork等公司提供的任何信标,也可以是iOS设备。谢这个链接

http://developer.radiusnetworks.com/2013/12/15/why-android-devices-cant-act-as-ibeacons.html

然而,三星声称某些设备可以配置为传输BLE广告包的设备。检查此链接

http://developer.samsung.com/ble

在本文档中检查问题12.iBeacon兼容设备?

http://www.cisco.com/c/dam/en/us/solutions/collateral/enterprise-networks/connected-mobile-experiences/ibeacon_faq.pdf

希望这可以帮助您解决问题。

答案 1 :(得分:1)

我发现上述答案部分不正确,基本上,这取决于您要实现的通信类型,每台设备的操作系统等。

从Lollipop开始,我们提供了一组新的API,允许我们在两个设备之间做广告并进行真正的双向通信answered here并在API文档android.bluetooth.le中定义。引用谷歌,

  

截至2014年12月,只知道Nexus 6和Nexus 9设备   具有支持蓝牙低功耗外设模式的固件。

使用Lollipop API进行构建时,请注意一些i​​Beacon兼容库中概述的警告,并确保:

BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
boolean isHardwareLCompat bluetoothAdapter != null
            && bluetoothAdapter.isOffloadedFilteringSupported()
            && bluetoothAdapter.isOffloadedScanBatchingSupported();

测试是否有真正的L支持。例如,HTC One M8开发人员版本有L,但它没有完全支持新的API。

我希望这会有所帮助