Dans mon application, j'utilise ReactiveLocationProvider pour obtenir des mises à jour de l'emplacement d'arrière-plan. (bibliothèque link) Lorsque mon application est réduite (entre dans OnPause), elle commence à recevoir des mises à jour. Cela fonctionne très bien, mais le problème est que je ne veux pas de mises à jour fréquentes. Par exemple, dans mon code j'ai un LocationRequest qui est supposé pour obtenir la mise à jour de l'emplacement (un) lorsque l'utilisateur se déplace 1km et au moins 10 minutes (setFastestInterval) ont passé. Selon mon journal, je reçois plus de mises à jour que nécessaire. Quelqu'un sait pourquoi?Mise à jour des emplacements trop fréquents en arrière-plan
c'est mon code dans mon MainActivity sur méthode de création:
public class MainActivity extends AppCompatActivity {
LocationRequest request;
ReactiveLocationProvider locationProvider;
Subscription subscription;
Subscription onlyFirstTimeSubscription;
NotAbleToGetWeatherDataTask mNotAbleToGetWeatherDataTask = new NotAbleToGetWeatherDataTask();
int numOfBackgroundUpdates = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//-----------MY CODE STARTS HERE-----------------
request = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
.setSmallestDisplacement(1000)
.setFastestInterval(10 * 1000)
.setInterval(30 * 60 * 1000);
locationProvider = new ReactiveLocationProvider(this);
}
et ma méthode OnPause:
@Override
protected void onPause() {
super.onPause();
//subscribe for background location updates...
subscription = locationProvider.getUpdatedLocation(request)
.subscribe(new Action1<Location>() {
@Override
public void call(Location location) {
Log.d(TAG, "Getting Background updates...");
MainActivity.this.latitude = location.getLatitude();
MainActivity.this.longitude = location.getLongitude();
numOfBackgroundUpdates++;
}
});
}
et je suis le désabonnement de la demande détruire:
@Override
protected void onDestroy() {
Log.d(TAG, "OnDestroy Called!");
subscription.unsubscribe();
super.onDestroy();
}
journal récent (j'ai déménagé 1km et au moins 10 minutes se sont écoulées)
12-28 17:12:25.564 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.918 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.924 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.925 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.927 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.928 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.930 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.931 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.940 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.942 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.942 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.946 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.949 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.951 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.951 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:06.951 29845-29845/? D/MainActivity: Getting Background updates...
12-28 17:16:40.371 29845-29845/? D/MainActivity: Getting Background updates...
avez-vous enregistré plus d'une demande? – Blackbelt
J'ai, mais je suis immédiatement la désinscription quand je reçois l'endroit comme ça: LocationRequest oneTimeOnStartRequest = LocationRequest.create() .setPriority (LocationRequest.PRIORITY_HIGH_ACCURACY) ... @Override appel public void (Lieu lieu) { Log.d (TAG, "Obtention des premières mises à jour de localisation ..."); .. onlyFirstTimeSubscription.unsubscribe(); } }); –
Faites un brin avec le code complet, s'il vous plaît – Blackbelt