Eventos de volumen de Android MediaRouter
Quiero implementar el cambio de volumen como se ve en la aplicación de Youtube durante el casting, como si la aplicación está en el fondo o en la pantalla de bloqueo
Me gusta esto
- Problemas con la configuración de clase MediaRecorder fuente de audio - setAudioSource () - parámetro no compatible
- Cómo configurar el archivo de audio como tono de llamada en Android?
- Android Streaming Wav Error de audio: Preparación de MediaPlayer: status = 0x1
- Android proceso de audio para sintonizador de guitarra
- Mute Efecto de audio izquierdo / derecho usando sdk Superpowered
private void createSession() { ComponentName receiver = new ComponentName(getPackageName(), RemoteReceiver.class.getName()); mediaSession = new MediaSessionCompat(this, "PlayerService", receiver, null); mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mediaSession.setPlaybackState(new PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1f) .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE) .build()); AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.requestAudioFocus(new AudioManager.OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(int focusChange) { // Ignore } }, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); mediaSession.setActive(true); mediaRouter = MediaRouter.getInstance(this); mediaRouter.setMediaSessionCompat(mediaSession); }
Ahora consigo el deslizador apenas como imagen arriba y responde a los botones del volumen, pero no recibo el cambio en mi receptor de la difusión.
- Establecer ToggleButton para reproducir el sonido predeterminado cuando se hace clic en?
- Android mediaplayer errores de audio / tartamudez sólo en los dispositivos más nuevos
- Detectar si el auricular tiene micrófono
- AudioRecord registra sonido intermitente en Android L Vista previa del desarrollador
- Aplicación de streaming de radio en línea para Android
- Enrutamiento de audio a auriculares Bluetooth (no A2DP) en Android
- Grabar sonido Y reproducir sonido modulado En Android?
- Reproducir audio entre los puntos A y B
Todo lo que tienes que hacer es crear un MediaSessionCompat
con un VolumeProviderCompat
.
// Here is a volume provider which sets the volume of a remote route. // Extend VolumeProviderCompat with your own implementation. public static class RemoteVolume extends VolumeProviderCompat { public RemoteVolume(MediaRouter.RouteInfo routeInfo) { super(VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, STEPS, 0); this.stepSize = routeInfo.getVolumeMax() / STEPS; this.routeInfo = routeInfo; } @Override public void onSetVolumeTo(int volume) { routeInfo.requestSetVolume(volume * stepSize); setCurrentVolume(volume); } @Override public void onAdjustVolume(int delta) { int newVolume = getCurrentVolume() + delta; routeInfo.requestSetVolume(newVolume * stepSize); setCurrentVolume(newVolume); } }
A continuación, conecte el VolumeProviderCompat
a su MediaSessionCompat
:
MediaSessionCompat session = new MediaSessionCompat(context, TAG); // might need some of these flags session.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS | MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS); // the volume buttons are routed to this session when it is // active and currently playing session.setPlaybackState(new PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f) .build()); session.setActive(true); // The media router tries to bind its own VolumeProvider which kinda // works. We need to unbind the one provided and put ours in. router.setMediaSessionCompat(session); session.setPlaybackToRemote(new RemoteVolume(myRemoteRoute));