2016-07-29 10 views
1

ich das Auslösen einer BoradcastReceiver wenn eine StandortaktualisierungAndroid RequestLocationUpdates zu pendingItent mit extra Bündel

PendingIntent pendingIntent = PendingIntent 
      .getBroadcast(this, 54321, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     LocationServices.FusedLocationApi.requestLocationUpdates(this.mGoogleApiClient, 
      mLocationRequest, pendingIntent); 

Und mein Receiever Empfang

public static class LocationReceiver extends BroadcastReceiver { 

@Override 
    public void onReceive(Context context, Intent intent) { 
     boolean hasLocation = LocationResult.hasResult(intent); 
    } 
} 

Wenn ich den obigen Code ausführen eveything feinen hasLocation funktioniert, ist immer wahr, perfekt.

Aber wenn ich möchte so etwas variabel an den Empfänger übergeben ich tun:

Intent intent = .. 
intent.putExtra("test", "hello"); 
PendingIntent pendingIntent = PendingIntent 
       .getBroadcast(this, 54321, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

Bit jetzt im Empfänger LocationResult.hasResult (Vorsatz); ist immer falsch

Ist das ein Fehler? Gibt es einen Workaround dafür? Wie kann ich Variablen an den Empfänger übergeben?

+0

Gibt 'hasResult' wahr oder falsch zurück? –

+0

hasResult gibt TRUE zurück, wenn ich keinen Zusatz in die Absicht gebe – Johny19

+0

Sie haben gesagt, hasResult ist immer NULL, aber es gibt einen booleschen Wert zurück. Ist es wahr oder falsch? Wenn Sie ein Extra in die Absicht setzen –

Antwort

0

Ich habe Ihre Frage beim googeln gefunden. Ich teile meine Lösung für den Fall, dass jemand diese Frage wie ich findet.

Erstens ist dies meine Situation, die ähnlich wie bei Ihnen ist:

requestLocationUpdates() speichert die Positionsdaten im mExtras Feld der Absicht. Wenn ich mit Intent.putExtra() ein anderes Extra zum Intent hinzufüge, werden die Standortdaten aus irgendeinem Grund nicht hinzugefügt. So wird onHandleIntent() aufgerufen, aber die Absicht fehlt den Standortdaten. Wenn ich keine Extras hinzufüge, kommen die Standortdaten durch und alles ist in Ordnung.

Meine Abhilfe:

I verwendet Intent.addCategory() und getCategory() genau die gleiche Sache wie putExtra zu tun ("myExtraName", String). Wenn Sie andere Datentypen übergeben möchten, konvertieren Sie sie in eine Zeichenfolge und parsen Sie sie dann in onHandleIntent().

Meine Umgebung:

Ich verwende Play Services Version 11.0.4 und FusedLocationProviderClient, da FusedLocationProviderApi kürzlich veraltet ist. Die FusedLocationProviderClient.requestLocationUpdates() Dokumentation scheint dies nicht zu adressieren.

+0

Die Dokumentation spricht das nicht an. Aber es hat immer noch das gleiche Problem. Ich bin einfach reingelaufen und habe das hier gefunden. –

+1

Es gibt nur ein Problem (oder einen Unterschied) bei der Verwendung von addCategory. Und das ist, wenn "removeLocationUpdates" aufgerufen wird. Mit Extras werden sie ignoriert. Bei Kategorie müssen die Kategorien gleich sein. Sie können also nur abbrechen, wenn Sie genau denselben PendingIntent mit den gleichen Kategorien erstellen. –

Verwandte Themen