Angenommen, ich habe den AOSP-Quellcode. Wie kann ich die APP im Vordergrund anhalten, wenn ich das Benachrichtigungsfeld herunterziehe? Ich habe eine APP gegoogelt und finden Sie können das Ereignis hören onWindowFocusChange
und einige Maßnahmen proaktiv nehmen, aber wie kann ich Pause JEDE APP , wenn das Benachrichtigungsfeld nach unten ziehen, ohne jede APP ändern bzw. (was unpraktisch ist)?
Gibt es eine Möglichkeit, die onPause
Funktion einer Vordergrund-App über den SystemUI-Prozess aufzurufen?
android
android-developer-api
zhangxaochen
quelle
quelle
Antworten:
Sie können die folgende Methode verwenden, um das Ziehen des Benachrichtigungsfelds zu erkennen:
In Ihrer Manifestdatei
Überschreiben Sie in Ihrer Aktivität
onWindowFocusChanged()
den folgenden Code und schreiben Sie ihn.Dies verwendet die Berechtigung
Klicken Sie dann in Ihrer App-Anfrage für den Audiofokus auf den folgenden Link
https://developer.android.com/guide/topics/media-apps/audio-focus#java
Dadurch wird der Audiozugriff für alle anderen Apps angehalten.
quelle
Die Lösung besteht aus zwei Teilen
Zur Erfassung Benachrichtigungsfenster ziehen Sie die Methode vorgeschlagen einsetzen kann durch Akash oder denselben Code hier von Lalith.
Für den zweiten Teil implementieren alle gut gestalteten Mediaplayer Audio Focus Change Listener. Um alle Media Player-Apps anzuhalten, können Sie einen temporären oder vollständigen Audiofokus anfordern, je nachdem, ob Sie die Apps wieder abspielen lassen möchten, sobald das Benachrichtigungsfeld ausgeblendet ist.
Verwenden Sie Folgendes
Vergessen Sie nicht, AudioFocusChangeListener zu implementieren
Soweit ich das System untersucht habe, ist der Prozess nicht zugänglich. Sie können jedoch eine Aktivität mit transparentem Thema starten .
In deinem Manifest
siehe dies und ich habe auch persönlich getestet, transparente Aktivitäten zu erstellen.
Dies bedeutet, dass die Aktivität oben Ihre transparente Aktivität ist und die onPause-Methode der anderen Aktivität natürlich aufgerufen wird. Sobald das Benachrichtigungsfeld ausgeblendet ist, können Sie diese Aktivität zerstören. Und um auf der sicheren Seite zu sein, können Sie auch den onTouch-Listener einstellen, indem Sie eine leere Ansicht erstellen, die den Bildschirm fühlt, der die Aktivität aufTouch zerstören sollte.
quelle
Angenommen , das Android- Gerät verwendet den Standard- MediaPlayer gemäß diesem Statusdiagramm , können Sie den nativen verwenden
pause
und denstop
Status verwenden.Wenn Sie den Ton nur nicht stoppen möchten, können Sie wahrscheinlich die Lautstärke mithilfe einer VolumeAutomation ändern .
quelle