Starten Sie die Aktivität vom Dienst in Android

Lesezeit: 4 Minuten

Starten Sie die Aktivitat vom Dienst in Android
D-Mann

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 gestartet Activity

Im Activity wenn Bedingung erfüllt start

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

Von meinem LocationService oben erwähnt konnte nicht gestartet werden Activitywie kann ich den Kontext des aktuellen Betriebs abrufen Activity in der Dienstklasse?

Starten Sie die Aktivitat vom Dienst in Android
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

1646634787 395 Starten Sie die Aktivitat vom Dienst in Android
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

1646634788 354 Starten Sie die Aktivitat vom Dienst in Android
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

https://developer.android.com/guide/components/activities/background-starts

  • @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

Starten Sie die Aktivitat vom Dienst in Android
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

1646634789 963 Starten Sie die Aktivitat vom Dienst in Android
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);

963600cookie-checkStarten Sie die Aktivität vom Dienst in Android

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy