J'ai eu quelques problèmes pour essayer de transmettre des données via des intentions et des intentions en attente à un BroadcastReceiver, concernant des alertes de proximité. Plus précisément, j'essaie de passer un objet, qui entre autres tient la position de l'utilisateur en constante évolution. J'ai essayé différentes tactiques proposées ici (et pas seulement), mais aucune n'a fonctionné, résultant en des valeurs nulles ou des intentions créées pour la première fois, lorsque l'intention est récupérée du côté de BroadcastReceiver. Tactiques utilisées:PendingIntents conserve le même objet
- Signalement l'intention qui transporte l'objet avec: FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_SINGLE_TOP Résultat: Les valeurs nulles du côté de la BroadacastReceiver
- pavillon au but en instance créée en utilisant l'objectif initial, avec: FLAG_UPDATE_CURRENT ou FLAG_CANCEL_CURRENT Résultat: Valeurs Null du côté de BroadacastReceiver
- Acquisition d'un ID aléatoire pour l'intention ou l'intention en attente à l'aide de System.currentTimeMillis(); Résultat: Les intentions ne sont pas déclenchées ou reçues du tout
- Rien n'a été décrit ci-dessus. Résultat: Récupérer la même valeur initiale à chaque fois.
code pour le procédé d'appel (débarrassé de toute expérimentation/produire des valeurs nulles):
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 pour la méthode appelante qui définit le filtre d'intention et enregistre le BroadcastReceiver:
public void addNewCarPoint (MyCar myCar){
IntentFilter filter = new IntentFilter(myCar.getMyCarName());
registerReceiver(new ProximityAlertReceiver(), filter);
setProximityAlert(myCar);
}
Code pour le côté récepteur de la diffusion:
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(){
}
}
Toutes les idées seraient plus que bienvenues. Merci d'avance.
Je l'ai essayé aussi, mais il semble qu'il tombe également dans la troisième tactique décrite ci-dessus, sans intentions d'être tiré ou reçu:/ – nifo