wake-up-neo.com

android Aktivität aus dem Dienst starten

Android:

public class LocationService extends Service {

@Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        startActivity(new Intent(this, activity.class));
    }
}

Ich habe diesen Dienst von Activity aus gestartet.

In Activity, wenn Bedingung erfüllt, starten

startService(new Intent(WozzonActivity.this, LocationService.class));

von meinem LocationService, der oben erwähnt wurde, konnte Activity nicht gestartet werden, wie kann ich den Kontext der aktuellen Ausführung von Activity in der Serviceklasse ermitteln?

131
d-man

Aus der Serviceklasse heraus:

Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
318
d-man

Ich hatte das gleiche Problem und möchte Sie wissen lassen, dass keines der oben genannten Probleme bei mir funktioniert hat. Was bei mir funktioniert hat war:

 Intent dialogIntent = new Intent(this, myActivity.class);
 dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 this.startActivity(dialogIntent);

und in einer meiner Unterklassen, die in einer separaten Datei gespeichert waren, musste ich:

public static Service myService;

myService = this;

new SubService(myService);

Intent dialogIntent = new Intent(myService, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myService.startActivity(dialogIntent);

Alle anderen Antworten gaben mir ein nullpointerexception.

17
Andy

Noch etwas Erwähnenswertes: Während die obige Antwort gut funktioniert, wenn sich unsere Aufgabe im Hintergrund befindet, könnte ich sie nur dann zum Laufen bringen, wenn sich unsere Aufgabe (bestehend aus Service + einigen Aktivitäten) im Vordergrund befindet (dh eine unserer Aktivitäten sichtbar ist) zu Benutzer) war wie folgt:

    Intent intent = new Intent(storedActivity, MyActivity.class);
    intent.setAction(Intent.ACTION_VIEW);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    storedActivity.startActivity(intent);

Ich weiß nicht, ob ACTION_VIEW oder FLAG_ACTIVITY_NEW_TASK hier tatsächlich von Nutzen sind. Der Schlüssel zum Erfolg war

storedActivity.startActivity(intent);

und natürlich FLAG_ACTIVITY_REORDER_TO_FRONT, um die Aktivität nicht erneut zu instanziieren. Viel Glück!

8
kellogs

man kann das Context des Service nicht verwenden; konnte das (Paket) Context gleich bekommen:

Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
1
Martin Zeitler

Abwechselnd,

Sie können Ihre eigene Anwendungsklasse verwenden und von jedem Ort aus anrufen (insbesondere bei Nichtaktivitäten).

public class App extends Application {

    protected static Context context = null;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

}

Und registrieren Sie Ihre Bewerbungsklasse:

<application Android:name="yourpackage.App" ...

Dann ruf an :

App.getContext();
0
james