Android 估算区域监控

Android Estimote Region Monitoring

我正在尝试将 Estimote SDK 添加到我的 Android 应用程序中。我已经很接近了,但是我在监控一个区域时遇到了一些麻烦。我正在 https://github.com/Estimote/Android-SDK.

GitHub 上关注 Estimote Android SDK 指南

由于某种原因,onEnteredRegion 和 onExitedRegion 方法根本没有触发。我希望他们在应用程序看到 Estimote 信标时随时触发。谢谢!

这是我目前的代码。没什么太复杂的:

public class MainActivity extends Activity {

    private static final Region ALL_ESTIMOTE_BEACONS = new Region("regionId", "B9407F30-F5F8-466E-AFF9-25556B57FE6D", null, null);

    BeaconManager beaconManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final AlertDialog.Builder builder = new AlertDialog.Builder(this);

        beaconManager = new BeaconManager(this);
        beaconManager.setBackgroundScanPeriod(TimeUnit.SECONDS.toMillis(1), 0);

        beaconManager.setMonitoringListener(new MonitoringListener() {

            @Override
            public void onEnteredRegion(Region region, List<Beacon> beacons) {
                builder.setTitle("Entered Region")
                        .setMessage("")
                        .setNeutralButton("OK", null);
                AlertDialog dialog = builder.create();
                dialog.show();
            }

            @Override
            public void onExitedRegion(Region region) {
                builder.setTitle("Exited Region")
                        .setMessage("")
                        .setNeutralButton("OK", null);
                AlertDialog dialog = builder.create();
                dialog.show();
            }
        });
    }

    protected void onStart() {
        super.onStart();
        try {
            beaconManager.startMonitoring(ALL_ESTIMOTE_BEACONS);
        }
        catch (RemoteException e) {

        }
    }
}

尝试将其放入您的 onStart() 方法中:

beaconManager.connect(new BeaconManager.ServiceReadyCallback() {
  @Override
  public void onServiceReady() {
    try {
      beaconManager.startMonitoring(region);
    } catch (RemoteException e) {
      Log.d(TAG, "Error while starting monitoring");
    }
  }

您还需要记住在不再需要时断开与 BeaconManager 的连接,例如使用此 onDestroy 实施:

@Override
protected void onDestroy() {
    beaconManager.disconnect();
    super.onDestroy();
}

基本上,在beacon服务就绪后,需要启动测距和监控,利用上面的回调可以轻松实现。