Aufruf von Activity via Intent von Service mit Besonderheiten

  • Antworten:2
  • Bentwortet
pepperonas
  • Forum-Beiträge: 434

03.11.2014, 23:32:40 via Website

Hallo,

ich suche gerade nach einer Lösung, wie ich über einen Service eine Activity starten kann.
Da es sein kann, dass das Gerät gesperrt ist, wenn ich die Activity aufrufe, muss ich die Logik so anpassen, dass das Gerät, falls nötig, aus der Sperrung geweckt wird.
Aktuell habe ich es so gemacht, dass ich eine Activity erstellt habe, die einzig und alleine die Aufgabe hat Informationen anzuzeigen, wenn der Service diese Activity anstößt. Das funktioniert soweit auch.
Nun habe ich das Design der Anwendung überdacht und letztlich wäre es doch sinnvoller einfach in der MainActivity die Informationen darzustellen.

Aktuell suche ich also eine Möglichkeit herauszufinden von "wo" meine MainActivity aufgerufen wurde, da die darzustellenden Informationen variieren (sprich beim App-Start soll eine andere Logik berücksichtigt werden, als wenn der Service Main aufruft...)
Gibt es hier für eine möglichst saubere Lösung? Auf die Schnelle wäre meine erste Idee über einen Broadcast-Receiver die Informationen weiterzuleiten - aber das sieht mir irgendwie nach einer "zusammengefrickelten" Sache aus. Stehe gerade ein bisschen auf dem Schlauch..

Oder kurz: ich suche nach sowas wie "getCallingService()"... aber das scheint es nicht zu geben.

Vielen Dank im Voraus und beste Grüße
Martin

— geändert am 03.11.2014, 23:42:13

Open Source

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.11.2014, 23:51:10 via App

Du könntest dir das aufgerufene Intent per getIntent() anschauen.
Wenn du die Daten richtig auswertest dann müsstest du das finden was du suchst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
pepperonas
  • Forum-Beiträge: 434

04.11.2014, 00:11:42 via Website

Das hatte ich versucht, ging leider nicht.. Wahrscheinlich weil immer der erste Intent, den Main übergeben bekommen hat(te),wieder herangezogen wird, wenn ich die Extras herausholen möchte..

Habs aber schon hinbekommen.
Habe onNewIntent() überschrieben und bekomme so den neuen Intent.

Codebeispiel (falls noch jemand über die Problematik stößt)

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        String id = intent.getStringExtra(STR_KEY);

        Log.e(TAG, "Hallo Test: " + id);

        // Bildschirm entsperren
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

    }

(dass ist die Daten richtig angesprochen habe, kann ich zu 100% sicher sagen, da ich den Code sonst nicht verändert habe - nur dass er jetzt in der Methode onNewIntent ausgeführt wird)

— geändert am 04.11.2014, 00:13:56

Open Source

Antworten