¿Cómo evitar que VideoView / MediaPlayer detenga el audio de otras aplicaciones?

En una pantalla tengo un video de fondo de bucle (sobre el cual se muestran los elementos de interfaz de usuario normales), implementado con VideoView como esto:

String resPath = "android.resource://" + getPackageName() + "/" + R.raw.bg_video; videoView.setVideoURI(Uri.parse(resPath)); // Hide controls: MediaController controller = new MediaController(getActivity()); controller.setVisibility(View.GONE); videoView.setMediaController(controller); // Use looping: videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.setLooping(true); } }); videoView.start(); 

El video funciona muy bien. El único problema es que cuando se muestra esta vista (o incluso antes si se utiliza, por ejemplo, ViewPager), la reproducción de música de otras aplicaciones se detiene .

El video que estoy usando no tiene sonido. ¿Hay una manera de configurar el VideoView, o el MediaPlayer que utiliza, en un "modo silenciado"? Es decir, no decir que no hacer el audio en absoluto, y sobre todo no meterse con el audio de otras aplicaciones .

Probado mp.setVolume(0, 0); in onPrepared() pero no tiene efecto.

Copie la pasta VideoView desde fuentes de Android y comente estas líneas:

 AudioManager am = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 

Por ejemplo, podría nombrar a la nueva clase MutedVideoView .

aquí: https://gist.github.com/vishna/7e9d3466bced8502fcdd

La solución aceptada no garantiza la compatibilidad entre todas las versiones de Android y es un hack sucio más que una verdadera solución. He intentado todas las formas de hacks para conseguir este trabajo, pero ninguno ha funcionado a mi satisfacción.

He llegado con una solución mucho mejor sin embargo – cambiar de un VideoView a un TextureView y cargar con un MediaPlayer . No hay diferencia desde la perspectiva del usuario, simplemente no hay detención de audio.

Aquí está mi caso de uso para jugar un bucle MP4:

 private TextureView _introVideoTextureView; private MediaPlayer _introMediaPlayer; ... @Override public void onCreate(...) { _introVideoTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { try { destoryIntroVideo(); _introMediaPlayer = MediaPlayer.create(SignInActivity.this, R.raw.intro_video); _introMediaPlayer.setSurface(new Surface(surfaceTexture)); _introMediaPlayer.setLooping(true); _introMediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING); _introMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); } }); } catch (Exception e) { System.err.println("Error playing intro video: " + e.getMessage()); } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) {} @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {} }); } @Override public void onDestroy() { super.onDestroy(); destoryIntroVideo(); } private void destoryIntroVideo() { if (_introMediaPlayer != null) { _introMediaPlayer.stop(); _introMediaPlayer.release(); _introMediaPlayer = null; } } 
  • AudioTrack sólo reproducirá audio una vez
  • ¿Cómo mostrar archivos de audio en una vista de lista en Android?
  • RemoteControlClient - Audio Focus es necesario / necesario?
  • Android: Captura de audio interno con SDK
  • Detectar o la latencia aproximada de Bluetooth en Android (reproducción de audio)
  • Problemas con la configuración de clase MediaRecorder fuente de audio - setAudioSource () - parámetro no compatible
  • El audio sigue jugando después de cerrar la fuerza
  • Android proceso de audio para sintonizador de guitarra
  • ¿SoundTouch en Android?
  • Android: Necesidad de registrar la entrada de micrófono
  • Cómo activar / desactivar todos los sonidos de la configuración de accesibilidad mediante programación en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.