Android emplacement des mises à jour dans un Service
Je veux faire quelque chose comme ceci:
-
Quand mon application démarre, je veux démarrer un Service qui doit vérifier ma position
-
Lorsque l'application va à fond, je veux arrêter le service
J'ai deux problèmes majeurs:
-
Comment puis-je détecter que ma demande va à fond? Je haver plusieurs activités, et j'ai essayé dans mon MainActivity primordial onPause, mais le onPause est aussi appelé lorsque je démarre une autre activité.
-
Ce problème est plus important: Comment mon Service qui vérifie pour mon emplacement? J'ai essayé plusieurs méthodes, mais sans succès.
Mon Service ressemble à ça, et ça ne fonctionne pas. Que dois-je modifier pour le faire fonctionner?
package com.pivoscore.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
public class LocationService extends Service {
private LocationListener locationListener;
@Override
public IBinder onBind(final Intent intent) {
return null;
}
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
final LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
this.locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 0, this.locationListener);
}
private static class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(final Location location) {
}
@Override
public void onProviderDisabled(final String provider) {
}
@Override
public void onProviderEnabled(final String provider) {
}
@Override
public void onStatusChanged(final String provider, final int status, final Bundle extras) {
}
}
}
onResume() la méthode, laissez-le service de Localisation de la recherche, de l'Information et de onPause() la méthode de suppression de l'Emplacement.
Je veux utiliser ma localisation dans plusieurs activités, non seulement dans l'activité principale. Donc, il ne serait pas sage d'arrêter le Service en onPause, parce que si une autre activité vient à l'avant, onPause sera appelé, et je voudrais cesser de se l'emplacement des mises à jour.
android.la permission.ACCESS_COARSE_LOCATION android.la permission.ACCESS_FINE_LOCATION android.la permission.ACCESS_NETWORK_STATE avez-vous ajouté ces Permission dans votre fichier de manifeste ?
Je veux utiliser ma localisation dans plusieurs activités, non seulement dans l'activité principale. Donc, il ne serait pas sage d'arrêter le Service en onPause, parce que si une autre activité vient à l'avant, onPause sera appelé, et je voudrais cesser de se l'emplacement des mises à jour.
android.la permission.ACCESS_COARSE_LOCATION android.la permission.ACCESS_FINE_LOCATION android.la permission.ACCESS_NETWORK_STATE avez-vous ajouté ces Permission dans votre fichier de manifeste ?
OriginalL'auteur ffddani | 2013-02-25
Vous devez vous connecter pour publier un commentaire.
Cela Aidera exactement ce que votre condition est
mais n'oubliez pas d'Ajouter la permission, j'ai ajouté en commentaire
et aussi n'oubliez pas d'ajouter l'étiquette de service dans le Fichier de manifeste
Code Snipet est la Suite de
<service android:enabled="true" android:name=".LocationService"/>
oreo version 8.0 automaticallly onDestroy
OriginalL'auteur Usman Kurd
Application n'est pas un composant visuel dans Android. Il est divisé en Activités, chacun d'eux s'exécuter lorsqu'il est visible, en pause et détruit le contraire. Donc, il n'y a pas de concept d'ensemble de l'Application d'arrière-plan, les Activités sont suspendues et reprises sur la base de leur visibilité et sont complètement indépendants les autres Activités de cette question.
Votre Service procède à l'enregistrement de l'Emplacement du Gestionnaire dans son
onCreate()
, se désinscrire de la même dans sononDestroy()
. Dans sononBind()
il doit retourner unMessenger
objet. Et, dansonLocationChanged()
il devrait envoyer un message grâce au partage de laMessenger
. Pas besoin d'utiliserSTART_STICKY
que vous ne voulez pas de Service, exécution de tous les temps.L'Activité (peuvent être n'importe quelle activité dans l'App) juste besoin de faire appel
bindService()
dans sononStart()
, Le service va commencer si ce n'est déjà, et de l'Activité obtiendrez unMessenger
de service. Aussi, l'Activité devrait appelerunbindService()
de sononStop()
. Le Service s'arrête automatiquement quand rien n'est lié à elle.Si vous avez besoin de faire les choses au point 3 à l'Application (de la Tâche), de mettre en œuvre la
Application
de classe, et l'utilisation de sononCreate()
etonTerminate()
. La classe d'Application n'est pas en pause ou arrêté comme une Activité.Il n'y a pas de Visible de l'Application composant dans Android. Si quelqu'un de votre Activité est visible, l'Application est en cours d'exécution, sinon, l'Application est arrêtée et peut-être même détruit. Encore, vous pouvez utiliser le point 4.
OriginalL'auteur S.D.
Je vous conseille d'utiliser la dernière localisation de l'api fourni par google(également compatible avec la version 2.2).
voici un exemple qui montre comment l'utiliser:
https://github.com/chenjishi/android_location_demo
lorsque votre application s'exécuter à l'arrière-plan, vous pouvez appeler le débrancher pour arrêter l'emplacement de mise à jour.
OriginalL'auteur Jishi Chen
Essayer Ce code.. En utilisant ce que vous pouvez savoir si votre application est au premier plan ou en arrière-plan. Espérons que cela vous aidera.
ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION pour le futur emplacement de code rien de plus, n'oubliez pas d'ajouter chaque service de votre AndroidManifest
aucune des autorisations.. juste utiliser le contexte c'est tout.. et le premier plan est une valeur booléenne.. ctx Contexte ..l'utiliser, et laissez-moi savoir vos commentaires.
Okey. En utilisant ce code résolu mon premier problème. Merci.
si ses vraiment aidé à vous . upvote il
OriginalL'auteur itsrajesh4uguys