Предположим, у меня есть исходный код AOSP. Как я могу приостановить приложение на переднем плане при опускании панели уведомлений? Я гуглил и обнаружил, что приложение может прослушать событие onWindowFocusChange
и предпринять какие-то действия с упреждением, но как я могу приостановить ЛЮБОЕ приложение, когда опускаю панель уведомлений, не изменяя соответственно каждое приложение (что нецелесообразно)?
Есть ли способ, которым я могу вызвать onPause
функцию любого приложения переднего плана из процесса SystemUI?
android
android-developer-api
zhangxaochen
источник
источник
Ответы:
Вы можете использовать метод ниже для обнаружения тяги панели уведомлений,
В вашем файле манифеста
В своей деятельности переопределите
onWindowFocusChanged()
и напишите следующий код.Это использует разрешение
Затем в вашем приложении запрос на аудио-фокус, смотрите ссылку ниже
https://developer.android.com/guide/topics/media-apps/audio-focus#java
Это приостановит доступ к аудио для всех других приложений.
источник
Решение состоит из двух частей
Для обнаружения извлечения панели уведомлений вы можете использовать метод, предложенный Akash, или тот же код, что и здесь , Lalith.
Для второй части все хорошо разработанные медиаплееры реализуют Audio Focus Change Listeners. Таким образом, чтобы приостановить все приложения медиапроигрывателя, вы можете запросить временную или полную фокусировку звука в зависимости от того, хотите ли вы снова воспроизвести приложения, как только панель уведомлений будет свернута.
Используйте следующие
Не забудьте реализовать AudioFocusChangeListener
Насколько я исследовал, системный интерфейс не доступен. Однако вы можете запустить занятие с прозрачной темой .
В вашем манифесте
увидеть это, и я также лично проверил создание прозрачной деятельности.
Это означает, что активность сверху теперь является вашей прозрачной активностью, и естественно вызывается метод onPause другого действия. После того, как панель уведомлений свернута, вы можете уничтожить это действие. И чтобы быть в безопасности, вы также можете настроить прослушиватель onTouch, создав пустое представление, которое воспринимает экран, который должен уничтожить активность на Touch.
источник
Предполагая, что устройство Android использует MediaPlayer по умолчанию , в соответствии с этой диаграммой состояний вы можете использовать native
pause
иstop
state.Если вы не хотите останавливать звук, вы можете изменить громкость звука, используя VolumeAutomation ?
источник