【问题标题】:didexit region not firing in android beacondidexit 区域未在 android 信标中触发
【发布时间】:2015-08-11 11:51:35
【问题描述】:

我有一个应用程序可以使用 android 信标库检测 Ibeacon

我能够在入口区域检测到信标。但出口区域代码并非全部工作。

1.首先我将检测我的应用程序周围的所有信标 2.将开始监控每个信标

public void onBeaconServiceConnect() {
            // TODO Auto-generated method stub
            albeaconMnager.setRangeNotifier(new RangeNotifier() {

                @Override
                public void didRangeBeaconsInRegion(
                           Collection<org.altbeacon.beacon.Beacon> beacons,org.altbeacon.beacon.Region arg1) {
                           if(beacons.size()>0)
                           {
                              try {
                                       albeaconMnager.startMonitoringBeaconsInRegion(new  org.altbeacon.beacon.Region("Regionid", beacons.iterator().next().getId1(), beacons.iterator().next().getId2(), beacons.iterator().next().getId3()));
                        } catch (RemoteException e) {
                            // TODO Auto-generated catch bl
                           e.printStackTrace();
                        }


                    }

                    // TODO Auto-generated method stub

                }
            });

            albeaconMnager.setMonitorNotifier(new MonitorNotifier() {

                @Override
                public void didExitRegion(org.altbeacon.beacon.Region arg0)                  {
                    // TODO Auto-generated method stub
                    Log.i("tAG", "Exited Beacon!"+arg0.getUniqueId());   
                }

                @Override
                public void didEnterRegion(org.altbeacon.beacon.Region arg0) {
                    // TODO Auto-generated method stub
                                  connectToAppHandler(arg0.getId1().toString(),"entry");



                }

                @Override
                public void didDetermineStateForRegion(int state,
                        org.altbeacon.beacon.Region arg1) {
                    // TODO Auto-generated method stub

                    }
            });
            try {
                albeaconMnager.startRangingBeaconsInRegion(new org.altbeacon.beacon.Region("Regionid", null, null, null));
                //final Context context = this.getApplicationContext();

                } 
                catch (RemoteException e)
                    {  

                    }
            }
}

请帮忙

【问题讨论】:

    标签: android ibeacon-android


    【解决方案1】:

    下面的代码块中有几个问题。当信标可见时,didRangeBeaconsInRegion 方法大约每秒调用一次。在该方法中,定义了一个新的Region 匹配第一个检测到的信标,并开始对其进行监控。

    两个问题:

    1. 使用相同的区域标识符(Region 的第一个参数)每秒启动一次监控,有效地重新启动对该信标定义的区域的监控。因为每秒都会重新启动对单个区域的监控,所以只要任何信标可见,就不可能有区域退出火灾。当定义区域内的信标在 10 秒内没有被看到时,就会退出一个区域。

    2. 代码块使用 beacons.iterator.next() 访问信标的方式将仅获得测距回调中的第一个信标。如果多个信标可见,这可能会从一个方法回调更改为下一个,从而导致不确定的结果。

             @Override
              public void didRangeBeaconsInRegion(
                         Collection<org.altbeacon.beacon.Beacon> beacons,org.altbeacon.beacon.Region arg1) {
                         if(beacons.size()>0)
                         {
                            try {
                                     albeaconMnager.startMonitoringBeaconsInRegion(new  org.altbeacon.beacon.Region("Regionid", beacons.iterator().next().getId1(), beacons.iterator().next().getId2(), beacons.iterator().next().getId3()));
                      } catch (RemoteException e) {
                          // TODO Auto-generated catch bl
                         e.printStackTrace();
                      }
      
      
                  }
      
                  // TODO Auto-generated method stub
      
              }
          });
      

    与其在didRangeBeaconsInRegion 回调中开始监控,我建议只需更改代码以在启动测距的同时开始监控一次。像这样:

    albeaconMnager.startRangingBeaconsInRegion(new org.altbeacon.beacon.Region("Regionid", null, null, null));
    albeaconMnager.startMonitoringBeaconsInRegion(new org.altbeacon.beacon.Region("Regionid", null, null, null));
    

    【讨论】:

    • 我需要为我的范围内的每个信标触发进入和退出和进入事件。如果通过输入空值开始监视一个区域,是否可以找到哪个信标进入该区域以及哪个正在退出? ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多