Я создаю приложение для определения местоположения, в котором я отображаю фоновые местоположения из базы данных Room в MainActivity. Я могу получить ViewModel, позвонив
locationViewModel = ViewModelProviders.of(this).get(LocationViewModel.class);
locationViewModel.getLocations().observe(this, this);
Периодические фоновые местоположения должны сохраняться в базе данных комнат, когда я получаю обновления местоположений через BroadCastReceiver. Их следует сохранить, позвонив по номеру locationViewModel.getLocations().setValue()
public class LocationUpdatesBroadcastReceiver extends BroadcastReceiver {
static final String ACTION_PROCESS_UPDATES =
"com.google.android.gms.location.sample.backgroundlocationupdates.action" +
".PROCESS_UPDATES";
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
final String action = intent.getAction();
if (ACTION_PROCESS_UPDATES.equals(action)) {
LocationResult result = LocationResult.extractResult(intent);
if (result != null) {
List<Location> locations = result.getLocations();
List<SavedLocation> locationsToSave = covertToSavedLocations(locations)
//Need an instance of LocationViewModel to call locationViewModel.getLocations().setValue(locationsToSave)
}
}
}
}
}
Вопрос в том, как мне получить экземпляр LocationViewModel в неактивном классе, таком как этот BroadcastReceiver? Правильно ли вызывать locationViewModel = ViewModelProviders.of(context).get(LocationViewModel.class)
, где контекст - это контекст, который я получаю от onReceive (Context context, Intent intent)
BroadcastReceiver?
После получения ViewModel мне нужно использовать LiveData.observeForever и LiveData.removeObserver , поскольку BroadcastReceiver не является LifecycleOwner?