我正在尝试使用 Android Beacon Library 检测 iBeacons,而我的 Android 应用程序处于终止状态(未出现在任务管理器中)。
我已经成功地通过前台服务监控和范围化 iBeacon 区域,并且一切正常。现在,我想尝试“基于意图的扫描”来检测信标,但显然我缺少一些东西来实现这一点。我尝试使用可用的参考 Kotlin 应用程序配置基于意图的扫描,但我相信我没有完全理解基于意图的扫描是如何工作的。 我在下面报告了我的代码的有用部分:
override fun onCreate() {
super.onCreate()
val beaconManager = BeaconManager.getInstanceForApplication(this)
BeaconManager.setDebug(true)
val parser = BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")
parser.setHardwareAssistManufacturerCodes(arrayOf(0x004c).toIntArray())
beaconManager.getBeaconParsers().add(
parser)
setupBeaconScanning()
}
fun setupBeaconScanning() {
val beaconManager = BeaconManager.getInstanceForApplication(this)
// Enable intent-based scans
beaconManager.setIntentScanningStrategyEnabled(true)
beaconManager.startMonitoring(region)
val regionViewModel = BeaconManager.getInstanceForApplication(this).getRegionViewModel(region)
regionViewModel.regionState.observeForever(centralMonitoringObserver)
}
val centralMonitoringObserver = Observer<Int> { state ->
if (state == MonitorNotifier.OUTSIDE) {
Log.d(TAG, "outside beacon region: " + region)
}
else {
Log.d(TAG, "inside beacon region: " + region)
sendNotification()
}
}
使用此配置,监控不起作用(当应用程序位于前台时,当应用程序位于后台时)。