Android Périodique de la position GPS mises à jour avec AlarmManager à l'intérieur d'un Service

J'ai lu beaucoup de questions ici, mais ne pouvait pas comprendre ce qu'est le problème.

Je suis en train d'écrire un champ d'application de service pour Android. Dans l'une des Activités (MyActivity.java) j'ai deux boutons: Start et Stop.

Lorsque le travailleur sur le terrain appuie sur start j'ai besoin d'obtenir son emplacement actuel avec le GPS et l'envoyer au serveur en temps opportun des intervalles (disons qu'il sera de 5 minutes par défaut, ici je l'ai mis 20 secondes. pour les tests). Le client souhaite que cette de voir combien de temps les travailleurs passent de temps dans le trafic, le trafic dans ma ville (Istanbul) est un gâchis.

J'ai un AlarmManager dans mon activité, lorsque le bouton de démarrage est enfoncé, l'alarme est réglée par AlarmManager.setRepeating() pour démarrer le service (ServiceClass.java).

Intent intent = new Intent (MyActivity.this, ServiceClass.class);
mPendingIntent = PendingIntent.getService(MyActivity.this, 0, intent,
                                              PendingIntent.FLAG_CANCEL_CURRENT);
mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mAlarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 20*1000,
                                                                  mPendingIntent);

- Je annuler l'Alarme avec la touche Stop.

Il fonctionne parfaitement jusqu'ici, le Service démarre. Son onCreate(), onStart() et onDestroy() méthodes sont exécutées. Mais je ne peux pas obtenir l'emplacement. Je ne travaille pas sur un périphérique réel donc je suis en utilisant DDMS pour envoyer des emplacements. Mais l'application saute cette étape et d'estampes de la Longitude et de la Latitude de ma position que Lon:0 Lat:0.

Voici le code à l'intérieur du service:

public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    Log.d("Testing", "Service got started, calling location updates:");
    mLocationManager.requestSingleUpdate(mCriteria, mLocationListener,
                                                                getMainLooper());
    Log.i("TESTING LOCATION UPDATE: LOCATION:", "\nLat:"   + mLatitude +
                                                          "  Lon:" + mLongitude);
    stopSelf(startId);
    Log.d("Testing", "Service Stopped!");

Et enfin, voici mon: LocationListener:

 mLocationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {

            if(location != null){
                mLatitude = location.getLatitude();
                mLongitude = location.getLongitude();
                Log.i("onLocationChanged(Location location)", "Lat:"+mLatitude + "
                                                            Lon:" + mLongitude);
}

Aussi quelque chose qui a attiré mon attention, quand je lance le code:

mLocationProvider = mLocationManager.getBestProvider(mCriteria, true);
Log.i("BEST PROVIDER IS:", mLocationProvider);

Il dit MEILLEUR FOURNISSEUR de: gps. Mais ce journal à l'intérieur de onProviderEnabled() n'est jamais montré dans le logcat.

@Override
public void onProviderEnabled(String s) {
    Log.v("onProviderEnabled", "ENABLED");
}

Deux choses à ajouter, si j'utilise:

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
                                                              mLocationListener);

ça ne fonctionne pas non plus.

Toutefois, cela fonctionne et je peux obtenir le LastKnownLocation:

Location lastKnown = mLocationManager.getLastKnownLocation(
                                                   LocationManager.GPS_PROVIDER);

Tout d'abord, est-ce une bonne approche pour ce faire? Si il est s'il vous plaît vérifier pour voir ce que je suis absent. Si elle n'est pas, pouvez-vous s'il vous plaît dites-moi comment puis-je mettre en œuvre ce pas mieux?

Merci. 🙂

L'une des meilleures synthèses sur l'emplacement de Android; android-developers.blogspot.com/2011/06/... - elle traite de la plupart de vos questions
Grâce tonys, je vais lire que la première chose.
Cela fonctionne parfaitement: entrez description du lien ici

OriginalL'auteur Lev | 2012-03-26