当前位置: 首页 > 知识库问答 >
问题:

AltBeacon didEnterRegion()/didexitregion与Pibeacon不能正常工作。方法被随机调用

郭华美
2023-03-14

我希望我的android应用程序执行一些代码,当它进入特定信标的指定范围(RaspberryPi与蓝牙加密狗)。

这是我在RPi上使用的开始发出的命令:

sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39
     F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00

我已经编辑了BeaconLayout来检测iBeacons:

beaconManager.getBeaconParsers().add(new BeaconParser().
            setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
Region region1 = new Region("RaspberryPi", Identifier.parse("E20A39F4-73F5-4BC4-A12F-17D1AD07A961"), null, null);

beaconManager.setMonitorNotifier(new MonitorNotifier() {
        @Override
        public void didEnterRegion(Region region) {
            Log.i(TAG, "I just saw a beacon for the first time!");
        }

        @Override
        public void didExitRegion(Region region) {
            Log.i(TAG, "I no longer see a beacon");
        }

        @Override
        public void didDetermineStateForRegion(int state, Region region) {
            Log.i(TAG, "I have just switched from seeing/not seeing beacons: "+ state);
        }
    });

try {
    beaconManager.startMonitoringBeaconsInRegion(region1);
} catch (RemoteException e) {      }
05-19 23:18:52.487 31204-31220/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
05-19 23:18:53.952 31204-31220/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
05-19 23:18:55.195 31204-31220/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
05-19 23:18:56.570 31204-31220/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
05-19 23:18:57.742 31204-31219/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
05-19 23:18:57.782 31204-32016/com.daniellazarov.tempapp I/MonitoringActivity: I have just switched from seeing/not seeing beacons: 0
05-19 23:18:57.782 31204-32016/com.daniellazarov.tempapp I/MonitoringActivity: I no longer see a beacon
05-19 23:18:57.790 31204-32016/com.daniellazarov.tempapp I/MonitoringActivity: I have just switched from seeing/not seeing beacons: 0
05-19 23:18:57.790 31204-32016/com.daniellazarov.tempapp I/MonitoringActivity: I no longer see a beacon
05-19 23:18:57.790 31204-32016/com.daniellazarov.tempapp I/MonitoringActivity: I have just switched from seeing/not seeing beacons: 0
05-19 23:18:57.790 31204-32016/com.daniellazarov.tempapp I/MonitoringActivity: I no longer see a beacon
05-19 23:18:58.933 31204-31219/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
05-19 23:19:00.098 31204-31220/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
05-19 23:19:01.287 31204-31220/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
05-19 23:19:01.537 31204-32140/com.daniellazarov.tempapp I/MonitoringActivity: I have just switched from seeing/not seeing beacons: 1
05-19 23:19:01.537 31204-32140/com.daniellazarov.tempapp I/MonitoringActivity: I just saw a beacon for the first time!
05-19 23:19:01.538 31204-32140/com.daniellazarov.tempapp I/MonitoringActivity: I have just switched from seeing/not seeing beacons: 1
05-19 23:19:01.538 31204-32140/com.daniellazarov.tempapp I/MonitoringActivity: I just saw a beacon for the first time!
05-19 23:19:01.539 31204-32140/com.daniellazarov.tempapp I/MonitoringActivity: I have just switched from seeing/not seeing beacons: 1
05-19 23:19:01.539 31204-32140/com.daniellazarov.tempapp I/MonitoringActivity: I just saw a beacon for the first time!
05-19 23:19:02.629 31204-31219/com.daniellazarov.tempapp D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5

我假设这与覆盆子PI的传输速率有关,但我无法将其改变为有效的。

共有1个答案

艾才良
2023-03-14

干得好!一切似乎都在起作用。(只有一个奇怪的例外,即每个不同的日志html" target="_blank">消息都有三行日志--不确定为什么会发生这种情况。)

日志显示,您在信标检测中有一个退出,这导致了在05-19 23:18:57.782的退出事件,然后在05-19 23:19:01.537的另一个进入事件。虽然这段时间看起来很短(大约4秒),但辍学肯定比这段时间长得多。默认情况下,Android Beacon库不会发送区域退出事件,直到10秒内没有看到匹配区域定义的Beacon。这意味着有14秒的时间,您的Android设备没有看到来自覆盆子PI的传输。

Android设备不能接收到来自信标的某些传输是正常的。在近距离范围内,可能有80%的数据包被正确接收,其余的数据包由于无线电噪声、冲突、信道问题或其他低水平的蓝牙因素而丢失。如果你真的运气不好,你可能会连续错过几次传输。但是连续错过两三次以上的传输应该是极其罕见的。

>

  • 您的Raspberry Pi广告不是很频繁(可能每5秒才广告一次,如果您连续错过两个数据包,这将导致区域退出)。

    您的Android设备丢失了很多数据包。这有时可能是由WiFi/蓝牙干扰导致的,这些设备存在已知的干扰问题,如Nexus 7、Nexus 4、Moto G和Moto X。

    要找出它是哪一个,请尝试以下步骤:

  •  类似资料:
    • 我正在为我的android乞丐项目创建一个1对1扑克芯片计数器应用程序。当我按下任何调用displayBetPlayer1或displayBetPlayer2的按钮(+、-、Bet/Rise)时,我会收到一个运行时错误,所以我知道问题出在这些方法上。我还看到导入语句有一些不对劲的地方,但我对此太陌生,不明白是什么。有人知道问题出在哪里吗?(我将在注释中发布activity_main.xml,因为它

    • 嗨,我想在日志模式中显示登录的用户ID、主机名、ip地址等。我也在使用log4j。我正在使用MDC。在我的主控制器中,我可以看到带有指定模式的日志,但在其他文件日志中,我无法看到模式,这是不是好像我在某个会话中设置了MDC,并在其他控制器中再次放置了上下文值?请建议。 log4j.properties 我还有其他不同的控制器。现在,主控制器中的logger语句在日志模式中显示上下文信息,但在其他控

    • 我试图用Spring Boot和ReactJs构建一个CRUD应用程序,但我在“Edit”方法中遇到了一些错误。当我试图编辑一个用户时,我在网络选项卡中得到一个404错误,我设法在框中写入,当我想保存而不是编辑我选择的用户时,一个新的添加。“add”方法工作正常,但我认为这是方法之间的重叠。我将把代码留在这里:

    • 我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma

    • 2,错误{org.apache.directory.server.LDAP.ldapserver}-ERR_171无法将LDAP服务(10,389)绑定到服务注册表。java.net.BindException:已在使用的地址 请帮忙谢谢 --------提示------------------- JAVA_HOME环境变量设置为/opt/java CARBON_HOME环境变量设置为/mnt/1

    • 问题内容: 我正在尝试Java线程方法的示例。但是我发现即使线程已经启动,该方法仍在返回。有人可以告诉我我在做什么错吗?这是代码片段。 问题答案: 如果我的记忆很好,那么java在线程切换之间会有很长的时间间隔,因此isAlive可能会失败,因为线程 尚未 激活。尝试在thread.start()和thread.isAlive()之间添加一些等待时间