Activity aus Service starten

  • Hallo,


    ich versuche verzweifelt seit mehreren Tagen für meine erste eigene Wecker-App einen "Snooze"-Dialog zu realisieren. Ich registriere aus meiner Root-Activity einen Alarm über den AlarmManager. Wenn die gewählte Zeit erreicht ist, startet der BroadcastReceiver meinen AlarmService. Dieser wiederrum spielt einen Ton ab, ruft eine Activity (Snooze/Aus) auf und wartet im Falle von Snooze die definierte Zeit, um anschließend die Activity mitsamt Ton erneut aufzurufen. Die Kommunikation zwischen Activity und Service ist über einen weiteren BroadcastReceiver realisiert. Soweit so gut und soviel zum Aufbau.


    Die technische Umsetzung treibt mich aber in den Wahnsinn! Es kann doch nicht so schwer sein, aus dem Service eine Activity so zu starten (aktuell so:


    Java
    Intent i = new Intent(this, MyDialogActivity.class);i.putExtra(MyDialogActivity.TEXT, myObject.getText());
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(i);


    ), dass die Activity immer angezeigt wird, auch wenn die Root-Activity noch aktiv ist, über den Back-Button beendet, oder über den Home-Button in den Hintergrund verschoben wurde. Ist das Handy nicht im Standbymodus soll die Activity sofort angezeigt werden, ist das Handy im Standbymodus soll die Activity angezeigt werden, sobald der User das Handy aus dem Standbymodus aufweckt. Hier liegt auch das aktuelle Problem. Manchmal wird die Activity nicht im Standbymodus gerufen, manchmal nicht, wenn man die Root-Activity über den Back-Button beendet hat, manchmal wann anders nicht ... (abhängig von irgendwelchen kläglichen Versuchen meinerseits alle Fälle abzudecken).


    Sobald der User die Activity gesehen und einen Button (Snooze, Aus bzw. die Hardwaretasten Back und Home) gedrückt hat, soll die Activity komplett beendet werden. Hierzu rufe ich beim Button-Klick die finish()-Methode auf und überschreibe die onPause-Methode wie folgt (pm=PowerManager) (scheint auch zu funktionieren)


    Java
    protected void onPause() { if (pm.isScreenOn()) {  sendBroadcast(retValue);	  if (!isFinishing()) {	   finish();	  } else {	   moveTaskToBack(true);  } } super.onPause();	}


    Außerdem soll die Activity nur aus diesem Service geöffnet werden können. Hierzu deaktiviere ich die History:


    Code
    android:name=".activities.MyDialogActivity" android:noHistory="true" android:excludeFromRecents="true"


    Fragen:


    1.) Gibt es evtl. eine komplett andere, einfachere Lösung einen solchen Snooze/Aus-Dialog zu realisieren?
    2.) Falls nein, was mache ich falsch?


    Danke und Grüße

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!