0

Я хочу экспериментировать с iBeacon на Android. Похоже, что AltBeacon - лучший инструмент для использования. Я прочитал, что если я подклассию приложение моего приложения до this, я могу сделать свое приложение работоспособным, даже несмотря на то, что приложение будет убито после этого.Как сделать монитор AltBeacon в фоновом режиме только в том случае, если пользователь вошел в систему?

Что делать, если я хочу, чтобы мое приложение контролировалось только при входе пользователя в систему? Приложение будет запускать каждый запуск приложения, не так ли? Как запустить 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 
 

 
}

Это код будет гарантировать мое приложение, чтобы всегда сканировать маяк, только если пользователь регистрируется, даже после перезагрузки, и приложение не работает?

+0

Используйте 'SharedPreferences' или' boolean' для хранения значения, когда пользователь регистрируется в случае, если войти в систему, начать мониторинг и обновление 'значение SharedPreferences' или что логическое – hrskrs

+0

Так что вы хотите. сканировать маяки автоматически после загрузки, если пользователь * ранее * вошел в систему? Или вы хотите только сканировать маяки после загрузки, если пользователь снова войдет в систему после загрузки? – davidgyoung

+0

@ davidgyoung Я хочу, чтобы мое приложение автоматически сканировало маяки после загрузки, если пользователь ранее вошел в систему. Если пользователь ранее не вошел в систему, я хочу, чтобы мое приложение не сканировало для маяков. Поэтому, в основном, я хочу, чтобы приложение сканировалось ТОЛЬКО, если пользователь находится в состоянии входа в систему. Я уже использую SharedPreferences для отслеживания, если пользователь уже вошел в систему или нет, так что если пользователь уже зарегистрировался ранее, приложение будет пропустить раздел входа в систему даже после перезагрузки. – stackex

ответ

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(); 
    } 

} 
+0

В классе BeaconReferenceApplication я проверил условия входа в систему из SharedPreferences. Но, BeaconReferenceApplication запускается только один раз, когда пользователь запускает приложение, не так ли? Что, если после входа в систему пользователя, как я могу вызвать бутстрап, чтобы всегда запускать в фоновом режиме для сканирования маяка, даже после того, как приложение будет убито? Выше я немного обновляю свой код. – stackex

+0

Я раскрыл свой ответ выше, чтобы показать, как вы можете переключаться назад и вперед – davidgyoung