Estoy intentando hacer una pequeña app para practicar que consta de una actividad de inicio y una actividad para seleccionar un audio y reproducirlo. Para seleccionar el audio utilizo:
btnCambiarAudio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setType("audio/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Audio "), COD_SONIDO);
}
En el onActivityResult:
case COD_SONIDO:
Uri mUri=data.getData();
String stringUriAudio= data.getDataString();
//String stringUriAudio= mUri.toString();
SharedPreferences datosGuardados = getSharedPreferences("datosMarcos",MODE_PRIVATE);
SharedPreferences.Editor editor = datosGuardados.edit();
editor.putString(nombreAudioMarco, data.getDataString());
editor.apply();
He probado también con la instrucción comentada. Como veis, recibo la ruta del audio seleccionado y la almaceno mediante SharePreferences.
Después mediante otro botón reproduzco el audio seleccionado:
//obtiene la ruta guardada del archivo de audio seleccionado y vinculada al marco.
String audioMarco = datosGuardados.getString(nombreAudioMarco, "NULL");
Uri uriAudio= Uri.parse(audioMarco);
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(getApplicationContext,uriAudio);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
Log.e(LOG_TAG, "fallo en la reproduccion");
}
}
else {
Toast.makeText(getApplicationContext(), "no hay archivo de audio vinculado", Toast.LENGTH_LONG).show();
}
Primero recupero la ruta del audio seleccionado en string guardada con SharedPreferences, después creo un Uri, y la uso para reproducir el audio con MediaPlayer.
En principio funciona, es decir, de la actividad de inicio paso a la actividad de selección, selecciono un audio, y cuando le doy al play, funciona, reproduce el audio sin problemas y lo paro también sin problemas.
El problema, y lo que no entiendo, y llevo días buscando y probando, es que si salgo de la actividad de selección a la de inicio, y vuelvo a la actividad de selección, ya no funciona, da este error:
D/MediaPlayer: Couldn't open file on client side, trying server side
E/MediaPlayer: Unable to create media player
Y si vuelvo a seleccionar el audio y lo reproduzco, vuelve a funcionar.
En principio, si la ruta almacenada en el sharedpreferences, funciona después de seleccionar el audio, debería de funcionar cuando salgo y regreso a la actividad.
Creo que puede ser algo de permiso, pero el audio que selecciono está en la memoria interna, y en teoría no necesita darle ningún permiso especial.
Como información, añadir, que las pruebas las realizo en un dispositivo fisico, un sony m2, con lollipop (v 5.1.1).
btnCambiarAudio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setType("audio/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Audio "), COD_SONIDO);
}
En el onActivityResult:
case COD_SONIDO:
Uri mUri=data.getData();
String stringUriAudio= data.getDataString();
//String stringUriAudio= mUri.toString();
SharedPreferences datosGuardados = getSharedPreferences("datosMarcos",MODE_PRIVATE);
SharedPreferences.Editor editor = datosGuardados.edit();
editor.putString(nombreAudioMarco, data.getDataString());
editor.apply();
He probado también con la instrucción comentada. Como veis, recibo la ruta del audio seleccionado y la almaceno mediante SharePreferences.
Después mediante otro botón reproduzco el audio seleccionado:
SharedPreferences datosGuardados = getSharedPreferences("datosMarcos",MODE_PRIVATE);
//obtiene la ruta guardada del archivo de audio seleccionado y vinculada al marco.
String audioMarco = datosGuardados.getString(nombreAudioMarco, "NULL");
Uri uriAudio= Uri.parse(audioMarco);
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(getApplicationContext,uriAudio);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
Log.e(LOG_TAG, "fallo en la reproduccion");
}
}
else {
Toast.makeText(getApplicationContext(), "no hay archivo de audio vinculado", Toast.LENGTH_LONG).show();
}
Primero recupero la ruta del audio seleccionado en string guardada con SharedPreferences, después creo un Uri, y la uso para reproducir el audio con MediaPlayer.
En principio funciona, es decir, de la actividad de inicio paso a la actividad de selección, selecciono un audio, y cuando le doy al play, funciona, reproduce el audio sin problemas y lo paro también sin problemas.
El problema, y lo que no entiendo, y llevo días buscando y probando, es que si salgo de la actividad de selección a la de inicio, y vuelvo a la actividad de selección, ya no funciona, da este error:
D/MediaPlayer: Couldn't open file on client side, trying server side
E/MediaPlayer: Unable to create media player
Y si vuelvo a seleccionar el audio y lo reproduzco, vuelve a funcionar.
En principio, si la ruta almacenada en el sharedpreferences, funciona después de seleccionar el audio, debería de funcionar cuando salgo y regreso a la actividad.
Creo que puede ser algo de permiso, pero el audio que selecciono está en la memoria interna, y en teoría no necesita darle ningún permiso especial.
Como información, añadir, que las pruebas las realizo en un dispositivo fisico, un sony m2, con lollipop (v 5.1.1).
Gracias.
23/05/2022 06:56
Tu artículo es genial, ¿cómo puedo descargar tonos de https://sonnerietelephone.com/ llamada a mi teléfono móvil?