es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

iOS anula los botones de volumen del hardware (igual que Zello)

Actualmente estoy trabajando en una aplicación PTT (push-to-talk).
Estoy intentando utilizar los botones de volumen del hardware para iniciar/detener la transmisión.

Todas las soluciones sugeridas que he visto hasta ahora se pueden reducir a dos:

  1. Usar KVO para observar la propiedad outputVolume de AVAudioSession.
  2. Usar una notificación de API privada, a saber, AVSystemController_SystemVolumeDidChangeNotification y, desde iOS 15.0, SystemVolumeDidChange.

Sin entrar en los pros y los contras de cada solución, ambos tienen una cosa en común: se basan en el volumen, lo que plantea varios problemas.

  1. Presionar los botones de volumen cambia el volumen del sistema. Aunque esto se puede solucionar restableciendo el volumen del sistema, no es una solución elegante.
  2. No hay forma de distinguir entre cambios de volumen que vienen de los botones de hardware y cambios de volumen que vienen de otros medios, como el centro de comandos, por lo que el uso de los botones está limitado cuando la aplicación está en primer plano y activa.
  3. Cuando el usuario presiona el botón de volumen, hay un breve retraso entre el primer evento de cambio de volumen y los eventos consecutivos que siguen, lo que hace que sea difícil rastrear una pulsación y liberación rápida.

He notado que la aplicación Zello ha logrado de alguna manera superar estos problemas, ya que permiten el uso de los botones de volumen incluso cuando el dispositivo está cerrado o cuando el centro de comandos está abierto, sin ninguna interferencia en el volumen del sistema. Además, cambiar el volumen desde el centro de comandos no tiene ningún efecto.

¿Alguien tiene alguna idea de cómo lograr tal comportamiento?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en iOS especializado en funcionalidades relacionadas con el volumen, creo que es probable que la aplicación Zello utilice una combinación de diferentes técnicas para superar los problemas presentados por las soluciones mencionadas en la pregunta.

    Una posible opción sería utilizar un accesorio externo específicamente diseñado para trabajar con la aplicación. Esto permitiría que la aplicación recibiera eventos directamente desde el accesorio, sin depender de soluciones basadas en volumen que son propensas a interferencias.

    Otra opción podría ser capturar eventos a nivel bajo desde los botones del hardware del dispositivo mediante APIs privadas e implementar una lógica personalizada para manejar e interpretar correctamente estos eventos.

    Es importante tener en cuenta que ambas opciones implican el uso de APIs no públicas y pueden no cumplir con las pautas de la App Store de Apple. Como tal, recomendaría discutir esta opción con su equipo legal antes de seguir adelante como solución potencial.

    Como alternativa, un enfoque más sencillo sería simplemente informar al usuario que los botones de volumen se utilizan exclusivamente para la funcionalidad push-to-talk cuando la aplicación se ejecuta en primer plano. Esto proporcionaría una indicación clara e inequívoca al usuario y evitaría cualquier confusión que pudiera surgir al intentar anular el volumen del sistema.

Comments are closed.