2017-03-02 4 views
1

Ich muss geoFence am Ausgang aktualisieren. Dafür brauche ich an diesem Punkt den aktuellen Standort.Aktuellen Standort auf Geofence abrufen.GEOFENCE_TRANSITION_EXIT

Wenn mein app geschlossen ist Ich habe nicht Hörer für onLocationChanged. Und um update geoFence ich brauche meinen Standort. Ist sie eine Möglichkeit, aktuelle Lage bei 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); 
    } 

Broadcast-Receiver in 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 
        } 
       } 
      } 
     } 
    }; 

Alles funktioniert gut zu bekommen. Aber Es konnte keine Möglichkeit gefunden werden, currentLocation beim Beenden zu verlassen, wenn die App geschlossen wird.

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

Verwenden Sie einen Intent-Service? – mechdon

+0

Ja, ich bin und ich weiß, es sollte ein Broadcast-Empfänger sein – Nepster

+0

Wo ist Ihre tatsächliche Geofence-Anfrage hinzufügen? –

Antwort

0

Sie können Location Schnittstelle in Ihrer Übertragung und Verwendung überschreiben Methode implementieren OnLocationChanged ähnliche

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

würde ich nicht innerhalb eines IntentService oder BroadcastReceiver mit einem Location empfehlen, da sie einmal die zerstört werden Funktion (onHandleIntent oder onReceive) wurde beendet. Ich würde einen PendingIntent mit LocationManager verwenden, um ein einzelnes Update anzufordern, sobald Sie das Geofence-Ereignis erhalten. Ich habe Beispiel-Apps, um zu demonstrieren, wie Standort-Updates mit einem PendingIntent auf github (https://github.com/pablobaxter/AndroidLocationExamples) angefordert werden.

Edit:

FYI, ist IntentService nicht falsch. Sie führen nur die onHandleIntent Logik in einem Hintergrundthread vs onReceive, die auf dem Hauptthread ausgeführt wird.

Verwandte Themen