我有TextViews显示iBeacon的信息(例如uuid,major,minor等)和一个Detect / Stop按钮来开始/停止扫描BLE。当iBeacon关闭时按下按钮开始扫描时,应用程序没有按预期显示任何内容。但是,当iBeacon打开时我开始扫描,然后我在扫描时关闭iBeacon,应用程序仍会显示信息,就像它仍在检测iBeacon一样。当应用程序在信标打开时扫描BLE时,它会给出
在Logcat中D / BluetoothAdapter:onScanResult() - 设备=(我的设备号) RSSI = -49
。当我在扫描时关闭信标时,它会给出
D / BluetoothAdapter:startLeScan():null
和
D / BluetoothAdapter:onClientRegistered() - status = 0 clientIf = 4.
有什么方法可以检测是否使用LeScanCallback或任何东西关闭了iBeacon?我试图从Android iBeacon Library学习如何做到这一点,但我还是不知道。
提前致谢。
答案 0 :(得分:2)
无法确定信标发射器是否已关闭 - 您所能做的只是说您没有从中听到在一段时间内功能相同为了您的目的。
这可能听起来像是一个学术上的区别,但事实并非如此 - 两个手机之间在相同范围内对同一个信标进行并排比较的检测率可以非常大,从检测到多次检测之间的几秒钟第二
无论您决定使用何种未听到的间隔,请务必在各种手机上进行测试。
毋庸置疑,由于缺乏对“off”含义的任何通用定义,因此没有事件回调。
答案 1 :(得分:0)
您使用的是哪种Android API级别?如果您使用的是Android Marshmallow及以上版本,则可以使用ScanSettings.CALLBACK_TYPE_MATCH_LOST
。如果您根据匹配过滤器发现的设备不在范围内,我们会向您发送回调ScanCallback#onScanResult(int callbackType, ScanResult result)
。换句话说,输了。
否则,您可以在班级中添加HashMap<String,Timer>
字段(String
用于Mac地址)。每次收到广告包时都相应地更新一个标志,以便在时间到时它检查设备是否在范围内。如果在范围内,启动另一个计时器。否则就会丢失。