繁体   English   中英

蓝牙LE设备发现服务

[英]Service for Bluetooth LE device discovery

在实施大量使用Service的Android应用程序方面,我经验不足,我找不到任何好的建议或示例来帮助我在SO或github上(或通过谷歌搜索),所以我决定问我自己的问题。

启动我的应用程序后,它需要开始发现附近的Bluetooth LE信标设备,并且至少要继续这样做,直到到达后台为止。 这些信标唯一需要的就是获取信号最强的信标的基本数据(如UUID)。

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

目前,我只有一个常规Service ,只要绑定了任何东西,它就会在BluetoothAdapter上运行startLeScan()方法。 但是,我在应用程序中有多个Activity ,我认为绑定到Service并在其中每个绑定中解除绑定不是最好的做法。 我曾考虑过启动Service而不是绑定Service ,但是再次停止服务可能涉及很多编码-确定何时将Android应用程序放入后台afaik并不容易。

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

听起来好像您正在使用iBeacons。 检查半径网络信标库。 它有许多示例和说明,以供下载。 链接在这里:

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

库中包括用于发现新信标并轻松获取信息(UUID,主要,次要等)的方法。 他们甚至有展示如何做的例子。

除了其他答案之外,我还建议使用此iBeacon扫描应用程序。

适用于Android的BeaconBox

这对您在智能手机上测试信标很有用。

希望您能达成目标。

是的,我不认为自己是专家,所以一旦我做错了,请随时纠正我。

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

这意味着根本不需要任何Service -实际上实现onLeScan()方法就足够了,它应该这样做。 我也将所有这些都放在一个singleton类中,以便可以从应用程序中的任何位置访问它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM