Ésta es una pregunta muy antigua, pero esto ocurrió por primera vez en mis resultados de búsqueda para que otras personas con el mismo problema, probablemente vendrá sobre esta página eventualmente
A diferencia de lo que otros han dicho, de hecho, puede utilizar MediaPlayer para pequeños sonidos sin utilizar mucha memoria. Pondré un pequeño snippit modificado de mi aplicación de la caja de resonancia para mostrarte a qué me refiero.
private MediaPlayer mp;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
mp = new MediaPlayer();
}
private void playSound(int soundID){
mp.reset();
AssetFileDescriptor sound = getResources().openRawResourceFd(soundID);
try {
mp.setDataSource(sound.getFileDescriptor(),sound.getStartOffset(),sound.getLength());
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
}
con la forma en lo configuro, se crea el objeto MediaPlayer que vuelve a utilizar cada vez que se reproduce un sonido para que no se utiliza demasiado espacio.
Llamar a .reset() en lugar de .release() porque .release() solo se utiliza si se está deshaciendo de un objeto, sin embargo, desea mantener su objeto MediaPlayer.
Utiliza un assetfiledescriptor para establecer un nuevo archivo de sonido para que reproduzca tu reproductor en lugar de establecer un nuevo objeto en la dirección del reproductor multimedia porque de ese modo estás creando objetos nuevos dentro del método que no se manejan correctamente y finalmente se encuentra con el mismo error que describió.
Esta es solo una de las muchas maneras de usar MediaPlayer, pero personalmente creo que es la más eficiente si solo la usa para aplicaciones de sonido pequeño. El único problema es que es relativamente restrictivo en lo que puedes lograr, pero eso no debería ser un gran problema si realmente lo estás usando para pequeñas aplicaciones de sonido.
Funciona perfectamente para la liberación automática del reproductor cuando termina, muchas gracias – Pelanes
funciona como el encanto. –