Executer une méthode public d'une instance appelante, alarmManager et onReceive (BroadcastReceiver)
Bonjour,
j'utilise les localisations gps, et je souhaites relever la position (géolocalisée) toutes les "tempsDeReleve" secondes.
Mon activité principale MapsActivity, implemente LocationListener.
Je défini l'alarme à partir du moment ou je dois commencer le relevé de position :
Code:
1 2 3 4 5 6 7 8
|
// AlamrManager Classe : MapsActivity
Intent intent = new Intent(MapsActivity.this,LocationReceiver.class );
pending_intent = PendingIntent.getBroadcast(MapsActivity.this, 0, intent, 0);
long REPEAT_TIME = 1000 * tempsDeReleve;
alarme_manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarme_manager.setRepeating(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), REPEAT_TIME, pending_intent); |
la méthode static suivante d'une classe (LocationReceiver) héritant de BroadcastReceiver,
MapsActivity.montexteStatic().setText(strDate); s'exécute bien à REPEAT_TIME secondes.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
@Override
public void onReceive(Context context, Intent intent) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss a");
final String strDate = simpleDateFormat.format(calendar.getTime());
MapsActivity.montexteStatic().setText(strDate);
// MapsActivity.relevePosition();
// MapsActivity.faireTracer();
} |
Je voudrais lancer aussi relevePosition() et faireTacer(), sans avoir à rendre toutes les variables static.
Peut-on à partir du Context context retrouver l'instance de l'objet appelant MapsActivity? ou autre ?
--------------------------------------------
résolu en passant par une classe intermédiaire qui crée l'alarm et conserve un pointeur sur la MapActivité, permettant au BroadcastReceiver d'utiliser la méthode de classe static de cette classe intermédiaire