我使用带verison("2.19.4")的Alt信标库来获取信标。做一些研发工作
m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24
上面的布局设置在灯塔解析器类上。我将这段代码放在灯塔解析器类中,并分配给信标管理器。
val beaconManager = BeaconManager.getInstanceForApplication(this)
beaconManager.beaconParsers.clear()
val parser = BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")
beaconManager.beaconParsers.add(parser)
val region = Region("com.beacon", null, null, null)
// Set up a Live Data observer so this Activity can get monitoring callbacks
// observer will be called each time the monitored regionState changes (inside vs. outside region)
beaconManager.getRegionViewModel(region).rangedBeacons.observe(this, rangingMonitorObserver)s
beaconManager.startRangingBeacons(region)
private val rangingMonitorObserver = Observer<Collection<Beacon>> { beacons ->
Log.d("HomeFragment TAG", "Ranged: ${beacons.count()} beacons")
for (beacon: Beacon in beacons) {
Log.d("HomeFragment TAG", "$beacon about ${beacon.distance} meters away")
}
}
我执行这段代码,但没有得到信标。有人知道如何使用alt信标库获取估计信标吗?
提前感谢
发布于 2022-06-03 14:45:45
信标探测失败的原因很多。最常见的原因之一是,如果应用程序没有来自安卓的用于蓝牙扫描的适当权限。所需的特定权限取决于build.gradle文件中的targetSdkVersion
设置:
targetSdkVersion Android Version Permissions Needed
---------------- --------------- ------------------
31 12+ BLUETOOTH_SCAN
ACCESS_FINE_LOCATION
BLUETOOTH (install time)
BLUETOOTH_ADMIN (install time)
29-30 10-11 ACCESS_FINE_LOCATION
BLUETOOTH (install time)
BLUETOOTH_ADMIN (install time)
15-18 6-9 ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION
BLUETOOTH (install time)
BLUETOOTH_ADMIN (install time)
13-14 4-5 BLUETOOTH (install time)
BLUETOOTH_ADMIN (install time)
请注意,上述大多数权限(以“安装时间”结尾的权限除外)都是运行时权限,需要编写代码才能提示用户授予它们。如果用户不能授予它们,或者权限稍后丢失或恢复,则扫描将无法工作。
除此之外,如果您想在应用程序处于后台(屏幕上看不到活动)时检测到信标,您还必须在Android 10+上拥有ACCESS_BACKGROUND_LOCATION权限(targetSdkVersion 29或更高版本)。
编写代码以获得这些权限是很棘手的。确认您已经获得它们的最简单方法是转到Settings -> Apps ->您的应用程序名->权限
请注意,权限屏幕中的名称与清单中声明的权限略有不同,如下所示:
请阅读我的博客文章这里,以获得更多关于我们如何到达这里的信息。
https://stackoverflow.com/questions/72357782
复制相似问题