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?
Aus der Serviceklasse heraus:
Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
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
.
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!
man kann das Context
des Service
nicht verwenden; konnte das (Paket) Context
gleich bekommen:
Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
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();