Suponha que eu tenha o código-fonte AOSP. Como posso pausar o aplicativo em primeiro plano ao puxar o painel de notificação? Pesquisei no Google e encontrei um aplicativo que pode ouvir o evento onWindowFocusChange
e executar alguma ação de forma proativa, mas como posso pausar qualquer aplicativo ao abrir o painel de notificações, sem modificar todos os aplicativos respectivamente (o que é impraticável)?
Existe uma maneira de chamar a onPause
função de qualquer aplicativo em primeiro plano a partir do processo SystemUI?
android
android-developer-api
zhangxaochen
fonte
fonte
Respostas:
Você pode usar o método abaixo para detectar a solicitação do painel de notificação,
No seu arquivo de manifesto
Em sua atividade, substitua
onWindowFocusChanged()
e escreva o código abaixo.Isso usa a permissão
Em seguida, em sua solicitação de aplicativo para foco em áudio, consulte o link abaixo
https://developer.android.com/guide/topics/media-apps/audio-focus#java
Isso interromperá o acesso ao áudio para todos os outros aplicativos.
fonte
Existem duas partes na solução
Para detectar o recebimento do painel de notificação, você pode empregar o método sugerido por Akash ou o mesmo código aqui por Lalith.
Na segunda parte, todos os reprodutores de mídia bem projetados implementam ouvintes de mudança de foco de áudio. Portanto, para pausar todos os aplicativos do media player, você pode solicitar um foco de áudio temporário ou total, dependendo se deseja permitir que os aplicativos sejam reproduzidos novamente assim que o painel de notificações for fechado.
Use as seguintes
Não se esqueça de implementar o AudioFocusChangeListener
Tanto quanto eu pesquisei sistema ui processo não está acessível. No entanto, você pode iniciar uma atividade com tema transparente .
No seu manifesto
veja isso e eu também testei pessoalmente criando atividades transparentes.
Isso significa que a atividade no topo agora é sua atividade transparente e o método onPause da outra atividade será chamado naturalmente. Depois que o painel de notificação estiver fechado, você poderá destruir esta atividade. E para garantir a segurança, você também pode definir o ouvinte do onTouch, criando uma exibição vazia que parece a tela que deve destruir a atividade do onTouch.
fonte
Supondo que o dispositivo Android use o MediaPlayer padrão , de acordo com este diagrama de estado , você pode usar o nativo
pause
e ostop
estado.Se você não quiser parar o som, provavelmente poderá alterar o volume do som usando uma VolumeAutomation ?
fonte