我们假设我在他们各自的设备A
和B
上有两个用户androidA
和androidB
。我希望两者都能够打开一个应用程序,按下该应用程序中的一个按钮,该按钮启动BLE,然后每个按钮发送另一个user_id
。因此,androidA
收到b
,androidB
收到a
。我知道这可能通过回调发生,并且我可以通过单向通信实现这一点。也就是说,我可以将androidB
作为外围设备,androidA
作为中心,因此a
会收到user_id
的{{1}}。
双向沟通是否可行?如果没有,等待回调是否明智,一旦回调发生,他们切换角色?在这方面,我只需要检查以确保当b
获得androidA
范围内的回调时androidB
也会得到某种响应来执行操作。
答案 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兼容设备?
希望这可以帮助您解决问题。
答案 1 :(得分:1)
我发现上述答案部分不正确,基本上,这取决于您要实现的通信类型,每台设备的操作系统等。
从Lollipop开始,我们提供了一组新的API,允许我们在两个设备之间做广告并进行真正的双向通信answered here并在API文档android.bluetooth.le中定义。引用谷歌,
截至2014年12月,只知道Nexus 6和Nexus 9设备 具有支持蓝牙低功耗外设模式的固件。
使用Lollipop API进行构建时,请注意一些iBeacon兼容库中概述的警告,并确保:
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
boolean isHardwareLCompat bluetoothAdapter != null
&& bluetoothAdapter.isOffloadedFilteringSupported()
&& bluetoothAdapter.isOffloadedScanBatchingSupported();
测试是否有真正的L支持。例如,HTC One M8开发人员版本有L,但它没有完全支持新的API。
我希望这会有所帮助