public class LocationService extends Service {
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
startActivity(new Intent(this, activity.class));
}
}
Von meinem LocationService oben erwähnt konnte nicht gestartet werden Activitywie kann ich den Kontext des aktuellen Betriebs abrufen Activity in der Dienstklasse?
D-Mann
Aus der Service-Klasse heraus:
Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
Nur die FLAG_ACTIVITY_NEW_TASK wird benötigt, da nur Aktivitäten Aktivitäten ohne sie starten dürfen. „this“ kann anstelle von „getBaseContext“ und „getApplication“ verwendet werden, da der Dienst über einen eigenen Kontext verfügt.
– Sojurn
26. Dezember 2013 um 14:37 Uhr
Wie kann diese Aktivität programmgesteuert aus der Liste der letzten Bildschirme entfernt werden?
– Prashanth Debbadwar
2. November 2015 um 10:41 Uhr
Funktioniert nicht, wenn der Dienst im Hintergrund läuft. Irgendeine Lösung dafür?
– Rick Royd Aban
21. Juli 2016 um 9:28 Uhr
Bitte helfen Sie mir bei der offenen Anwendung vom Hintergrunddienst. Ich habe den Dienst Firebase (FCM) verwendet. Ich möchte den My Calling UI-Bildschirm von My App aus öffnen. Bitte helfen Sie mir dabei
– Dipanki Jadav
20. Oktober 2016 um 9:31 Uhr
Ich habe Ihren Code in meinen Dienst geschrieben, wenn sich die App im Hintergrund befindet, und ich sehe, dass der Dienst auf Xiaomi Mi A2 funktionierte, aber nicht auf Xiaomi Redmi Note 7. Können Sie mir helfen, warum es auf einem Gerät funktioniert und auf einem nicht?
– Amjad Omari
27. März 2020 um 17:54 Uhr
Andy
Ich hatte das gleiche Problem und möchte Sie wissen lassen, dass keiner der oben genannten Punkte bei mir funktioniert hat. Was für mich funktionierte, 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.
Sie speichern den Dienst in einem statischen Feld, was zu Speicherlecks führen könnte
– Murmel
15. Oktober 2016 um 8:28 Uhr
startActivity ist gleich this.startActivity! Sie erstellen eine nutzlose Instanz aus Ihrem Dienst mit gleich normaler startActivity, warum?
– Amir Hossein Ghasemi
25. Mai 2017 um 12:29 Uhr
José Braz
AKTUALISIEREN SIE ANDROID 10 UND HÖHER
Das Starten einer Aktivität aus dem Dienst (Vordergrund oder Hintergrund) ist nicht mehr zulässig.
Es gibt noch einige Einschränkungen, die in der Dokumentation zu sehen sind
@RahulBhobe Ich fand diese Antwort hilfreich, weil ich die hinzugefügt habe SYSTEM_ALERT_WINDOW (und das Aktivieren in den Einstellungen) hat mein Problem auf Android 10 gelöst.
–Daniel F
5. September 2020 um 7:32 Uhr
SYSTEM_ALERT_WINDOW kann in Go Edition-Geräten nicht gewährt werden.
– Schrdi
29. März 2021 um 11:25 Uhr
@Shrdi, hast du irgendwelche Lösungen für AndroidGo?
– AlexS
12. August 2021 um 16:45 Uhr
@AlexS Ich glaube nicht, dass dies unter Android 10+Go funktionieren kann, da dies die Systembeschränkung ist. Jede Funktion dazu sollte eine andere alternative Möglichkeit oder einen Hinweis bieten, der Benutzer stimmt dieser Erlaubnis möglicherweise auch nicht zu.
– Schrdi
14. August 2021 um 4:30 Uhr
Eine andere erwähnenswerte Sache: Während die obige Antwort gut funktioniert, wenn sich unsere Aufgabe im Hintergrund befindet, könnte ich sie nur zum Laufen bringen, wenn unsere Aufgabe (aus Service + einigen Aktivitäten) im Vordergrund wäre (dh eine unserer Aktivitäten sichtbar). an 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 die nicht benutzen Context des Service; konnte das (Paket) bekommen Context wie:
Intent intent = new Intent(getApplicationContext(), SomeActivity.class);
Ich denke das geht nur mit FLAG_ACTIVITY_NEW_TASK Flagge
– Cerlin
29. Oktober 2019 um 5:22 Uhr
James
Abwechselnd,
Sie können Ihre eigene Anwendungsklasse verwenden und von überall aus aufrufen (insbesondere Nicht-Aktivitä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 Anwendungsklasse:
<application android:name="yourpackage.App" ...
Dann ruf an :
App.getContext();
Ich denke das geht nur mit FLAG_ACTIVITY_NEW_TASK Flagge
– Cerlin
29. Oktober 2019 um 5:22 Uhr
Suraj Gaur
Sie können auch verwenden getApplicationContext() Methode in Ihrer Bedienung zum Laufen startActivity() Methode wie unten geschrieben:
Intent myIntent = new Intent();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(myIntent);
9636000cookie-checkStarten Sie die Aktivität vom Dienst in Androidyes