我在实施大量使用Service
s的Android应用时并不是很有经验,我无法找到任何好的建议或示例来帮助我github(或只是谷歌搜索)所以我决定问自己的问题。
当我的应用程序启动时,它需要开始发现附近的蓝牙LE信标设备,并且它必须继续这样做,至少直到它去了后台。我从这些信标中唯一需要的是获取信号最强的基本数据(如UUID)。
实现这一目标的最佳方法是什么?
目前我只有一个常规的Service
,只要有任何约束,它就会在startLeScan()
上运行BluetoothAdapter
方法。但是,我在应用中获得了超过1个Activity
,并且我不认为绑定到Service
,并且在每个中解除绑定是最好的事情。我考虑过启动Service
而不是绑定它,但是再次停止它可能涉及大量编码 - 当Android应用程序被放入后台时,它并不容易确定。
任何提示和建议都可能有用。
答案 0 :(得分:1)
听起来像是在使用iBeacons。检查半径网络信标库。它有一堆示例和如何下载的说明。这是链接:
http://developer.radiusnetworks.com/ibeacon/android/pro/download.html
库中包含用于发现新信标并轻松获取信息(UUID,Major,minor等)的方法。他们甚至有示例说明如何做到这一点。
答案 1 :(得分:1)
答案 2 :(得分:0)
是的,我不认为自己是专家,所以每当我出错时,请随时纠正我。
我愚蠢 - 我没有意识到startLeScan()
和stopLeScan()
方法都采用BluetoothAdapter.LeScanCallback
参数,并且此回调实际上包含一个名为{的方法{1}}在扫描BluetoothLE设备时调用异步。
这意味着根本不需要onLeScan()
- 它足以实际实现Service
方法,它应该这样做。我还把所有这些都放在一个单独的类中,以便它可以在应用程序的任何地方访问。
我现在将答案标记为正确答案,但如果您有更好的解决方案,请回答。