0

我想在 Android 上试验 iBeacon。看起来 AltBeacon 是最好的工具。我读到如果我将我的应用程序的应用程序子类化到this,即使应用程序随后被杀死,我也可以使我的应用程序工作。

如果我想让我的应用仅在用户登录时进行监控怎么办?应用程序将在每次启动应用程序时运行,不是吗?登录后如何在应用程序中运行 BootstrapNotifier,如果用户未登录则不运行它?

        @Override
        protected void onPostExecute(final Boolean success) {
            if (success) {
                //algorithm to make altbeacon run in the background, even after the app killed
            } else {
                //if failed
            }
        }

因此,这是建议的解决方案:

public class BeaconReferenceApplication extends Application implements BootstrapNotifier {

    // OTHER CODE

    public void onCreate() {
        super.onCreate();
        if (loggedin) {
            BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
            Region region = new Region("backgroundRegion", null, null, null);
            regionBootstrap = new RegionBootstrap(this, region);
            BeaconManager.getBeaconSimulator()).createTimedSimulatedBeacons();
        }
    }

    // OTHER CODE

}


public class LoginACtivity {

    // OTHER CODE

    public void onClick {

        if (username == TRUE && password == TRUE) {
            // SINCE THE USER LOGGED IN, HOW DO I MAKE MY APP TO START ALWAYS SCAN EVEN AFTER REBOOTING AS LONG THE USER ISN'T LOGGING OUT?
        }

    }

    // OTHER CODE

}

public class MainActivity {

    // OTHER CODE

    private void logout {

        // SINCE THE USER CLICK LOG OUT BUTTON, HOW DO I MAKE MY APP TO STOP SCANNING EVEN AFTER REBOOTING UNTIL THE USER LOGGING IN AGAIN?

    }

    // OTHER CODE

}

该代码是否会保证我的应用程序仅在用户登录时始终扫描信标,即使在重新启动并且应用程序未运行后也是如此?

4

1 回答 1

1

您只需包装构造RegionBootstrap对象的代码即可检查用户之前是否登录过。如果没有,请不要构建它。

然后,您可以稍后禁用RegionBootstrap它,并在必要时重建它。像这样:

public class BeaconReferenceApplication extends Application implements BootstrapNotifier {
  ...
  private RegionBootstrap regionBootstrap;

  public RegionBootstrap startBeaconMonitoring() {
    if (regionBootstrap == null) {
        Region region = new Region("backgroundRegion", null, null, null);
        regionBootstrap = new RegionBootstrap(this, region);          
    }
  }

  public RegionBootstrap stopBeaconMonitoring() {
    if (regionBootstrap != null) {
        regionBootstrap.disable();          
    }
  }

  public void onCreate() {
    super.onCreate();
    if (loggedin) {
       startBeaconMonitoring();
       ...
    }
}


public class MainActivity {
  ...
  private void logout() {
    ((BeaconReferenceApplication)this.getApplication()).stopBeaconMonitoring();
  }
  private void login() {
    ((BeaconReferenceApplication)this.getApplication()).startBeaconMonitoring();
  }

}
于 2015-03-23T11:21:07.560 回答