Supongamos que tengo el código fuente de AOSP. ¿Cómo puedo pausar la aplicación en primer plano al desplegar el panel de notificaciones? Busqué en Google y encontré que una APLICACIÓN puede escuchar el evento onWindowFocusChange
y tomar medidas de manera proactiva, pero ¿cómo puedo pausar CUALQUIER APLICACIÓN al desplegar el panel de notificaciones, sin modificar cada APLICACIÓN respectivamente (lo cual no es práctico)?
¿Hay alguna manera de llamar a la onPause
función de cualquier aplicación en primer plano desde el proceso SystemUI?
android
android-developer-api
zhangxaochen
fuente
fuente
Respuestas:
Puede usar el siguiente método para detectar la extracción del panel de notificaciones,
En su archivo de manifiesto
En su actividad, anule
onWindowFocusChanged()
y escriba el siguiente código.Esto usa el permiso
Luego, en su solicitud de aplicación para el enfoque de audio, consulte el siguiente enlace
https://developer.android.com/guide/topics/media-apps/audio-focus#java
Esto pausará el acceso de audio para todas las demás aplicaciones.
fuente
La solución tiene dos partes.
Para detectar la extracción del panel de notificaciones, puede emplear el método sugerido por Akash o el mismo código aquí por Lalith.
Para la segunda parte, todos los reproductores multimedia bien diseñados implementan oyentes de cambio de enfoque de audio. Por lo tanto, para pausar todas las aplicaciones del reproductor de medios, puede solicitar un enfoque de audio temporal o completo dependiendo de si desea permitir que las aplicaciones se reproduzcan nuevamente tan pronto como el panel de notificaciones esté colapsado.
Usar siguiente
No olvides implementar AudioFocusChangeListener
Por lo que he investigado, el proceso ui del sistema no es accesible. Sin embargo, puede iniciar una actividad con un tema transparente .
En tu manifiesto
veo esto y también he probado personalmente la creación de actividad transparente.
Esto significa que la actividad en la parte superior ahora es su actividad transparente y, naturalmente, se llamará al método onPause de la otra actividad. Una vez que el panel de notificaciones está colapsado, puede destruir esta actividad. Y para estar seguro, también puede configurar onTouch listener creando una vista vacía que sienta la pantalla que debería destruir la actividad en Touch.
fuente
Suponiendo que el dispositivo Android usa el MediaPlayer predeterminado , de acuerdo con este diagrama de estado , puede usar el estado nativo
pause
y elstop
estado.Si solo desea detener el sonido, ¿es probable que cambie el volumen del sonido con una Automatización de volumen ?
fuente