【问题标题】:Monitoring Listener detects only one beaconMonitoring Listener 仅检测到一个信标
【发布时间】:2016-01-16 09:16:54
【问题描述】:

我有 3 个 Estimote 信标(Div Kit)。在我的 Android 应用程序中,我试图更改 3 个 TextView 以显示每个信标的主要和次要。我已将信标设置更改为每 1 毫秒发布一次信号,这是最短的时间。

问题是我的BeaconManager 对象只检测到一个信标,并且需要一段时间才能做到这一点。

这是我的代码

App.java

public class App extends Application {

    public static BeaconManager mBeaconManager;

    @Override
    public void onCreate() {
        super.onCreate();
        mBeaconManager = new BeaconManager(getApplicationContext());
        mBeaconManager.setBackgroundScanPeriod(TimeUnit.SECONDS.toMillis(1), 0);

        mBeaconManager.connect(new BeaconManager.ServiceReadyCallback() {
            @Override
            public void onServiceReady() {
                mBeaconManager.startMonitoring(new Region(
                        "monitored region",
                        UUID.fromString("B9407F30-F5F8-466E-AFF9-25556B57FE6D"),
                        null, null));
            }
        });
    }
}

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView tv = (TextView) findViewById(R.id.tv);
        final TextView tv2 = (TextView) findViewById(R.id.tv2);
        final TextView tv3 = (TextView) findViewById(R.id.tv3);

        App.mBeaconManager.setMonitoringListener(new BeaconManager.MonitoringListener() {
            @Override
            public void onEnteredRegion(Region region, List<Beacon> list) {
                tv.setText(list.get(0).getMajor() + " : " + list.get(0).getMinor());
                if (list.size() > 1) {
                    tv2.setText(list.get(1).getMajor() + " : " + list.get(1).getMinor());
                }
                if (list.size() > 2) {
                    tv3.setText(list.get(2).getMajor() + " : " + list.get(2).getMinor());
                }
            }

            @Override
            public void onExitedRegion(Region region) {
                tv.setText("Exit");
            }
        });
    }

我知道代码可能不专业,但仅用于测试。

【问题讨论】:

    标签: android ibeacon ibeacon-android estimote


    【解决方案1】:

    您好,我遇到了同样的问题 但我解决了这个问题

    beaconManager.setRangeNotifier(new RangeNotifier() {
            @Override            
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                Log.i("test", "Detected " + beacons.size());
                if (beacons.size() > 0) {
                    beaconList.clear();
                    for (Beacon beacon : beacons) {
                        beacon.setHardwareEqualityEnforced(true);
                        beaconList.add(beacon);
                    }
                }
    

    我插入 beacon.setHardwareEqualityEnforced(true);

    【讨论】:

      【解决方案2】:

      在你的方法之后试试这个。

      mBeaconManager.connect(new BeaconManager.ServiceReadyCallback() {
              @Override
              public void onServiceReady() {
                  mBeaconManager.startMonitoring(new Region(
                          "monitored region",
                          UUID.fromString("B9407F30-F5F8-466E-AFF9-25556B57FE6D"),
                          null, null));
              }
      });
      
      // Apply this method mBeaconManager.setRangingListener
      
      mBeaconManager.setRangingListener(new BeaconManager.RangingListener() {
      
          @Override
          public void onBeaconsDiscovered(Region region, final List<Beacon> beaconList) {
              if (!beaconList.isEmpty()) {
              // You will find total list of beacon around of you.
                  Log.e("Length of Beacon List - ", String.valueOf(beaconList.size()));
              }
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多