Frage

ich habe ein paar Probleme konfrontiert versuchen, Daten über Absichten passieren und in Erwartung Absichten zu einem BroadcastReceiver, über Annäherungswarnung. Genauer gesagt, ich versuche, ein Objekt zu übergeben, dass die sich ständig ändernden Position des Benutzers unter anderem hält. Ich habe verschiedene Taktiken versucht, hier vorgeschlagen werden (und nicht nur), aber keine gearbeitet, was entweder auf Nullwerte oder gleiche-as-erstmalige erstellt Absichten, wenn es die Absicht, auf dem BroadcastReceiver Seite abgerufen wird. Taktik:

  • Flagging die Absicht, die das Objekt trägt mit: FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_SINGLE_TOP Ergebnis: Null-Werte auf dem BroadacastReceiver Seite
  • Flagging die anstehende Absicht geschaffen, um die ursprüngliche Absicht mit, mit: FLAG_UPDATE_CURRENT oder FLAG_CANCEL_CURRENT Ergebnis: Null-Werte auf dem BroadacastReceiver Seite
  • Der Erwerb eine zufällige ID für Vorsatz oder die anstehende Absicht mit System.currentTimeMillis (); Ergebnis: Intents sind nicht gefeuert oder empfangen auf allen
  • Nichts wie oben beschrieben. Ergebnis:. Abrufen des gleichen Ausgangswert jedes Mal

Code für Rufmethode (gestrippt von irgendwelchen Experimenten / Nullwerte erzeugt):

private void setProximityAlert(MyCar myCar) { 
  String locService = Context.LOCATION_SERVICE; 
  LocationManager locationManager; 
  locationManager = (LocationManager)getSystemService(locService);
  float radius = myCar.getMyCarRadius(); 
  long expiration = myCar.getMyCarExpiration(); 
  myService.setMyDriverLat(userLat);//setting user's position
  myService.setMyDriverLng(userLng);//setting user's position
  Intent  intent = new Intent(myCar.getMyCarName());
  intent.putExtra("myCar",myCar);

  PendingIntent proximityIntent = PendingIntent.getBroadcast(this, -1, intent, 0);
  locationManager.addProximityAlert(myCar.getMyCarLat(), myCar.getMyCarLng(), radius, expiration, proximityIntent);
 }

-Code für den Aufruf der Methode, dass Sätze der Intent-Filter und Register der BroadcastReceiver:

public void addNewCarPoint (MyCar myCar){
        IntentFilter filter = new IntentFilter(myCar.getMyCarName());
        registerReceiver(new ProximityAlertReceiver(), filter);
        setProximityAlert(myCar);
    }

Code für die BroadcastReceiver Seite:

public class ProximityAlertReceiver extends BroadcastReceiver {
 @Override
 public void onReceive (Context context, Intent intent) {
 MyCar myCar=(MyCar)intent.getParcelableExtra("myCar");
  driverLoc=(String)Double.toString(myCar.getMyDriverLat());
  Toast.makeText(context, userLoc, Toast.LENGTH_SHORT).show();
  Intent i = new Intent(context, MyCarDiscoveryPrompt.class);
  context.startActivity(i);//firing intent
 }
 public void intentDataLoader(){      
 }

}

wären Irgendwelche Ideen mehr als willkommen. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Hmm ich glaube, ich habe etwas gefunden:

Ich legte den BroadcastReceiver (ProximityAlerReceiver), verwendet, um Annäherungswarnung in der gleichen Klasse (MyCarTracking.class) zu erkennen, wo die LocationListener.class befindet. Dies, bietet sofortigen Zugang zu frischem Standortaktualisierungen, eine neue Absicht eingewickelt in einem neuen PendingIntent zum BroadcastReceiver wird gefeuert zu schaffen (nur, wenn die Nähe Kriterien erfüllt sind). Fahnen: FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_SINGLE_TOP und FLAG_CANCEL_CURRENT auf Vorsatz und PendingIntent, wurden jeweils gehalten. Genauer gesagt:

-Code für Location:

private final LocationListener locationListener = new LocationListener() { 
        public void onLocationChanged(Location location) {
            updateWithNewLocation(location);//update application based on new location
        }
        public void onProviderDisabled(String provider){ 
            updateWithNewLocation(null);//update application if provider disabled
        }
        public void onProviderEnabled(String provider){
            // Update application if provider enabled
        } 
        public void onStatusChanged(String provider, int status, Bundle extras){ 
            //update application if provider hardware status changed
        }
    };

-Code für setProximityAlert () Methode:

private void setProximityAlert() { 
    String locService = Context.LOCATION_SERVICE; 
    Context context =getApplicationContext();
    LocationManager locationManager; 
    locationManager = (LocationManager)getSystemService(locService);
    float radius = myCar.getMyCarRadius(); 
    long expiration = myCar.getMyCarExpiration(); 
    Intent  intent = new Intent(CAR_DISCOVERED);
    intent.putExtra("myCar",myCar);
    locationManager.getLastKnownLocation(provider);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//flagging intent
    PendingIntent proximityIntent = PendingIntent.getBroadcast(context, -1, intent, PendingIntent.FLAG_CANCEL_CURRENT);//flagging pendingIntent         
    locationManager.addProximityAlert(myCar.getMyCarLat(), myCar.getMyCarLng(), radius, expiration, proximityIntent);//setting proximity alert
}

Diese Lösung funktioniert Herstellung von Frisch Absichten mit frischer Lage Updates. Vielen Dank für Ihre Hilfe und Ihr Interesse:)

Andere Tipps

Versuchen Sie, intent.setData (uri); wo uri einige eindeutigen Wert für jede anhängige Absicht

Ich habe auch mit diesem Problem zu kämpfen. Es dauerte eine ganze Nacht zu finden, dass ein seltsamer Fehler war ich zu diesem Problem hatte.

Hier ist eine gute Diskussion auf Google Code zum Thema: http: / /groups.google.com/group/android-developers/browse_thread/thread/b2060b27c8934921

Ich habe meine Probleme gelöst alle durch (ab) sowohl die uri in SetData mit und (reserviert) Anforderungscode in PendingEvent.GetWhatever.

Ich bin auch FLAG_CANCEL_CURRENT auf meine Absichten verwenden und sicherstellen, dass nur pendingintents, die den gleichen Zweck die gleichen Daten, Aktion erhalten teilen und uri.

Hope es hilft ein wenig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top