Załóżmy, że mam kod źródłowy AOSP. Jak mogę zatrzymać aplikację na pierwszym planie podczas opuszczania panelu powiadomień? Poszukałem go i stwierdziłem, że aplikacja może nasłuchiwać zdarzenia onWindowFocusChange
i podejmować pewne działania proaktywnie, ale jak mogę zatrzymać DOWOLNĄ APLIKACJĘ podczas opuszczania panelu powiadomień bez modyfikacji odpowiednio każdej aplikacji (co jest niepraktyczne)?
Czy istnieje sposób, że mogę wywołać onPause
funkcję dowolnej aplikacji pierwszego planu z procesu SystemUI?
android
android-developer-api
zhangxaochen
źródło
źródło
Odpowiedzi:
Możesz użyć poniższej metody wykrywania ściągnięcia panelu powiadomień,
W twoim pliku manifestu
W swojej działalności zastąp
onWindowFocusChanged()
i napisz poniższy kod.To używa pozwolenia
Następnie w prośbie aplikacji o fokus audio zapoznaj się z linkiem poniżej
https://developer.android.com/guide/topics/media-apps/audio-focus#java
Spowoduje to wstrzymanie dostępu audio dla wszystkich innych aplikacji.
źródło
Rozwiązanie składa się z dwóch części
Aby wykryć ściąganie panelu powiadomień, możesz zastosować metodę sugerowaną przez Akash lub ten sam kod tutaj przez Lalith.
W drugiej części wszystkie dobrze zaprojektowane odtwarzacze multimedialne wykorzystują Audio Focus Change Listeners. Dlatego, aby wstrzymać wszystkie aplikacje odtwarzacza multimediów, możesz poprosić o tymczasowe lub pełne skupienie dźwięku w zależności od tego, czy chcesz zezwolić aplikacjom na odtwarzanie, gdy tylko panel powiadomień zostanie zwinięty.
Użyj następujących
Nie zapomnij wdrożyć AudioFocusChangeListener
O ile badałem proces interfejsu użytkownika systemu nie jest dostępny. Możesz jednak uruchomić działanie z przezroczystym motywem .
W twoim manifeście
zobacz to i osobiście przetestowałem, tworząc przejrzystą aktywność.
Oznacza to, że aktywność na górze jest teraz twoją przezroczystą aktywnością, a metoda onPause innej aktywności zostanie naturalnie wywołana. Po zwinięciu panelu powiadomień możesz zniszczyć tę aktywność. Aby być bezpiecznym, możesz również ustawić odbiornik onTouch, tworząc pusty widok, który odczuwa ekran, który powinien zniszczyć aktywność onTouch.
źródło
Zakładając, że urządzenie z Androidem używa domyślnego MediaPlayera , zgodnie z tym diagramem stanu , możesz użyć rodzimego
pause
istop
stanu.Jeśli nie chcesz tylko zatrzymać dźwięku, prawdopodobnie możesz zmienić głośność za pomocą VolumeAutomation ?
źródło