Jetzt wird's merkwürdig:
Ich hätte gerne zyklisch ( alle 15 Minuten ) eine Info über meine aktuelle Position.
Ich habe per Alarmmanager einen zyklischen 15 Minuten Alarm gestartet. Der kommt auch.
Im Broadcast Receiver des Alarms rufe ich dann die Funktion:
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (locationManager != null)
{
Toast.makeText(context, "SingleUpdate", Toast.LENGTH_LONG).show();
locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, locationListener, null);
}
Durch die Toast-Ausgabe kann ich sehen, das die SingleUpdate Funktion wirklich alle 15 Minuten aufgerufen wird.
Und jetzt kommt das Merkwürdige:
Ich habe zwei völlig identische Handys, zur gleichen Zeit beim gleichen Handler gekauft.
Bei dem ersten Handy funktioniert alles, beim zweiten wird der Listener nicht aufgerufen.
Kann sich jemand einen Reim darauf machen?
Hier der relevante Code als Auszug:
public class Alarm extends BroadcastReceiver
{
public LocationListener locationListener=null;
public LocationManager locationManager;
@Override
public void onReceive(Context context, Intent intent)
{
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
locationListener = new LocationListener()
{
public void onLocationChanged( Location location )
{
ToneGenerator toneGen = new ToneGenerator(AudioManager.STREAM_ALARM, 100);
toneGen.startTone(ToneGenerator.TONE_SUP_CONFIRM, 40);
}
};
if(locationListener!=null)
{
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (locationManager != null)
{
Toast.makeText(context, "SingleUpdate", Toast.LENGTH_LONG).show(); // For example
locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, locationListener, null);
}
wl.release();
}
}
}
Alles anzeigen
Was noch merkwürdig ist:
Ich hatte den Listener zuerst als separate Memberfunktion des Alarms geschrieben und den Listener nur einmal am Anfang erzeugt.
Dabei ist meine App aber ständig abgestürzt.
Die oben angegebene Vorgehensweise ( Listener mit new in der onReceiveFunktion erzeugen ) habe ich aus einem Beispiel.
Das kommt mir sehr suspekt vor, hat aber funktioniert.