2017-03-02 1 views
1

Je dois mettre à jour geoFence à la sortie. Pour cela, j'ai besoin de l'emplacement actuel à ce moment-là.Obtenir l'emplacement actuel sur Geofence.GEOFENCE_TRANSITION_EXIT

Quand mon application est fermée Je n'ai pas écouteur pour onLocationChanged. Et pour mettre à jour la géoFence, j'ai besoin de mon emplacement. Leur un moyen d'obtenir l'emplacement actuel à Geofence.GEOFENCE_TRANSITION_EXIT

public void broadcastUpdateGeoFences() { 
     MainActivity.isGeoFenceAdded = false;//It tells to update geoFence 
     Intent intent = new Intent(Constants.RECEIVER_GEOFENCE); 
     intent.putExtra("done", 1); 
     sendBroadcast(intent); 
    } 

Diffusion récepteur dans MainActivity

private BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       int resultCode = bundle.getInt("done"); 
       if (resultCode == 1) { 

        if(!MainActivity.isGeoFenceAdded){ 
         updateGeoFencesOnCurrentExit();//I need current location here 
        } 
       } 
      } 
     } 
    }; 

Tout fonctionne bien. Mais Impossible de trouver un moyen de passer currentLocation à la sortie lorsque l'application est fermée.

private void updateGeoFencesOnCurrentExit(Location currentLocation){ 
      locationHandler.updateGeoFences(currentLocation); 
} 
+0

Utilisez-vous un service d'intention pour cela? – mechdon

+0

Oui, je suis et je sais que ce devrait être un récepteur de diffusion – Nepster

+0

Où est votre demande d'ajout de Geofences? –

Répondre

0

Vous pouvez implémenter l'interface LocationListener dans votre méthode override diffusion et d'utilisation OnLocationChanged comme celui-ci

@Override 
public void onLocationChanged(Location location) { 
    location.getLongitude(); 
    location.getLatitude(); 
} 
0

Je recommande de ne pas utiliser un LocationListener intérieur d'un IntentService ou BroadcastReceiver, car ils peuvent être détruits une fois que la La fonction (onHandleIntent ou onReceive) s'est quittée. J'utiliserais PendingIntent avec LocationManager pour demander une mise à jour unique une fois que vous avez reçu l'événement geofence. J'ai des exemples d'applications pour montrer comment demander des mises à jour d'emplacement en utilisant un PendingIntent sur github (https://github.com/pablobaxter/AndroidLocationExamples).

Edit:

Pour votre information, IntentService ne se trompe pas. Vous exécutez simplement la logique onHandleIntent dans un thread d'arrière-plan par rapport à onReceive s'exécutant sur le thread principal.