蓝牙LE设备发现服务

时间:2014-07-08 15:58:56

标签: android bluetooth android-service bluetooth-lowenergy

我在实施大量使用Service s的Android应用时并不是很有经验,我无法找到任何好的建议或示例来帮助我github(或只是谷歌搜索)所以我决定问自己的问题。

当我的应用程序启动时,它需要开始发现附近的蓝牙LE信标设备,并且它必须继续这样做,至少直到它去了后台。我从这些信标中唯一需要的是获取信号最强的基本数据(如UUID)。

实现这一目标的最佳方法是什么?

目前我只有一个常规的Service,只要有任何约束,它就会在startLeScan()上运行BluetoothAdapter方法。但是,我在应用中获得了超过1个Activity,并且我不认为绑定到Service,并且在每个中解除绑定是最好的事情。我考虑过启动Service而不是绑定它,但是再次停止它可能涉及大量编码 - 当Android应用程序被放入后台时,它并不容易确定。

任何提示和建议都可能有用。

3 个答案:

答案 0 :(得分:1)

听起来像是在使用iBeacons。检查半径网络信标库。它有一堆示例和如何下载的说明。这是链接:

http://developer.radiusnetworks.com/ibeacon/android/pro/download.html

库中包含用于发现新信标并轻松获取信息(UUID,Major,minor等)的方法。他们甚至有示例说明如何做到这一点。

答案 1 :(得分:1)

除了其他答案,我推荐这款iBeacon扫描应用程序。

BeaconBox for Android

您可以在智能手机上测试信标。

我希望你达到目标。

答案 2 :(得分:0)

是的,我不认为自己是专家,所以每当我出错时,请随时纠正我。

我愚蠢 - 我没有意识到startLeScan()stopLeScan()方法都采用BluetoothAdapter.LeScanCallback参数,并且此回调实际上包含一个名为{的方法{1}}在扫描BluetoothLE设备时调用异步

这意味着根本不需要onLeScan() - 它足以实际实现Service方法,它应该这样做。我还把所有这些都放在一个单独的类中,以便它可以在应用程序的任何地方访问。

我现在将答案标记为正确答案,但如果您有更好的解决方案,请回答。