[英]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,主要,次要等)的方法。 他们甚至有展示如何做的例子。
是的,我不认为自己是专家,所以一旦我做错了,请随时纠正我。
我startLeScan()
-我没有意识到startLeScan()
和stopLeScan()
方法都带有BluetoothAdapter.LeScanCallback
参数,并且此回调实际上包含一个名为onLeScan()
的方法,该方法在扫描BluetoothLE设备时被异步调用。
这意味着根本不需要任何Service
-实际上实现onLeScan()
方法就足够了,它应该这样做。 我也将所有这些都放在一个singleton类中,以便可以从应用程序中的任何位置访问它。
现在,我会将答案标记为正确的答案,但是如果您有更好的解决方案,请回答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.