先考虑 Android 平台
大概用来做类似于室内定位,当设备靠近某个 BLE 设备时执行相应动作(比如发出通知等)
要求能长时间后台运行,对后台友好并且不过多消耗电量/资源,所以基于 foreground service 的方案不考虑了。(国产安卓杀后台的情况不考虑,不在本贴讨论范围内,只考虑原生安卓的行为,即原生安装默认电池优化的情况下能正常运行即可)。
用 Geofence 来触发不考虑,范围太大。
有什么好的解决方案呢?用 JobScheduler 定时触发 BLE Scan ?
或是把外部 BLE 设备作 Central ,安卓 App 做 peripheral ?然后外部 BLE 设备不断地尝试连接安卓 App 的 BLE peripheral ?我搜了下,安卓 App 也可以实现 peripheral ,但是似乎也挺依赖后台机制,网上给的方案都是做成 foreground service 的。
或是外部 BLE 设备发送 ibeacon?网上逛了下,似乎只有 iOS 能被动的触发(这里似乎有个完美方案: https://developer.estimote.com/ibeacon/tutorial/part-2-background-monitoring/ ),安卓端似乎还是要主动执行 BLE Scan ?那么问题又回到了上面,如何/何时在后台触发 BLE Scan 。
安卓端除了主动 BLE Scan 有没有更好的方法?
感谢各位!
1
liyafe1997 OP 找到一个叫 Android beacon library 的东西,不知道效果怎么样,看起来用的人不多,有没有踩过坑的朋友?
https://altbeacon.github.io/android-beacon-library/index.html |
2
jojo0830 264 天前
这套方案一个致命的问题就是后台保活。也许你该换一套方案,比如说,开发一个蓝牙设备,当发现手机的蓝牙信号后就发出信号,但是还有一个问题,就是,蓝牙的定位一般都不太准。
|
3
snowflake007 262 天前
我们搞过蓝牙定位很不准,信号不稳定。现在扫描 Wi-Fi ,可是干扰项很多也不准。。。 搞🧶
|