Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 06/06/13, 20:57:51
Array

[xs_avatar]
berto1989
Usuario invitado
 
Mensajes: n/a

Crasheo de aplicacion en MediaMetadataRetriever

Buenas, estoy intentando obtener el artista y la canción de una radio streaming, pero al poner el codigo y darle al boton de obtener, me crashea la aplicación.


El codigo es este:

Código:
TextView tab3 = (TextView)findViewById(R.id.textView3);

MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
			       metaRetriever.setDataSource("http://2xx.xxx.xx1.xxx:8xxx/");
			 
			        String out = "";
			        // get mp3 info
			        out += metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
			        out += "\n";
			        out += metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
			        out += "\n";
			        out += metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
			        out += "\n";
			        out += metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
			        out += "\n";
			        // convert duration to minute:seconds
			        String duration = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
			        long dur = Integer.parseInt(duration);
			        String seconds = String.valueOf(dur % 60);
			        String minutes = String.valueOf(dur / 60000);
			        out += "Length: [ " + minutes + "m" + seconds + "s ]\n";
			 
			        // close object
			        metaRetriever.release();
			        // display output
			        tab3.setText(out);
Alguna posible aclaración de por que me pasa esto?

Gracias de antemano

Última edición por berto1989 Día 09/06/13 a las 13:44:36.
Responder Con Cita


  #2  
Viejo 06/06/13, 21:16:50
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
¿Lo estás haciendo en el hilo principal?

Si es así tiene toda la pinta de un NetworkOnMainThreadException.
Responder Con Cita
  #3  
Viejo 06/06/13, 21:30:54
Array

[xs_avatar]
berto1989
Usuario invitado
 
Mensajes: n/a

Lo estoy haciendo dentro de

Código:
protected void onCreate(Bundle savedInstanceState) {

final ImageView info_cancion = (ImageView) findViewById(R.id.info);
		 
info_cancion.setOnClickListener(new OnClickListener() {
	        
			  
			 public void onClick(View view) {
Responder Con Cita
  #4  
Viejo 07/06/13, 14:32:33
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
Es decir en el hilo principal, porque que yo sepa el setOnClickListener no crea hilos secundarios, con lo cual es el fallo que dice kriogen, llamadas a internet se hacen siempre en hilos secundarios, pero aun asi te pondra en el LogCat el tipo de error que es.
Si no es ese mira haber que error te marca y luego copias la primera linea del error en google y te dara la solucion.
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #5  
Viejo 07/06/13, 14:47:45
Array

[xs_avatar]
berto1989
Usuario invitado
 
Mensajes: n/a

Estos son los errores que me da al crashear

Código:
06-07 12:44:35.754: E/Trace(23745): error opening trace file: No such file or directory (2)
06-07 12:44:52.053: E/AndroidRuntime(23745): FATAL EXCEPTION: main
06-07 12:44:52.053: E/AndroidRuntime(23745): java.lang.IllegalArgumentException
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:68)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at es.xxxx.xxxx.xxxxx.cancion(xxxxx.java:230)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at es.xxxx.xxxx.xxxxx$4.onClick(xxxxx.java:170)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at android.view.View.performClick(View.java:4204)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at android.view.View$PerformClick.run(View.java:17355)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at android.os.Handler.handleCallback(Handler.java:725)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at android.os.Handler.dispatchMessage(Handler.java:92)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at android.os.Looper.loop(Looper.java:137)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at java.lang.reflect.Method.invoke(Method.java:511)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-07 12:44:52.053: E/AndroidRuntime(23745): 	at dalvik.system.NativeStart.main(Native Method)
Responder Con Cita
  #6  
Viejo 07/06/13, 15:03:39
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
El sistema no puede abrir la dirección web que has puesto.

¿Le has dado a tu app permisos para que acceda a Internet?
Responder Con Cita
  #7  
Viejo 07/06/13, 15:19:33
Array

[xs_avatar]
berto1989
Usuario invitado
 
Mensajes: n/a

Si, en el manifiest

Código:
<uses-permission 
	    android:name="android.permission.INTERNET"     
	    />
Responder Con Cita
  #8  
Viejo 07/06/13, 19:18:15
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
intenta abrir otra direccion que sepas que va a funcionar, igual puedes probar google.es? Sino igual es el puerto o asi, pero vamos esta claro que te falla por la linea 68 y la comunicacion con esa direccion IP.

Haciendo tu trabajo y mirando por internet ahora veo que parece ser que hay un problema en la v4.1.1 y me imagino que para delante tambien en el cual da error al hacer la llamada, pero desde la 2.1 hasta la 4.0.4 si que funciona.

La forma de solucionarlo es usando setDataSource(link, headers); por lo que te quedaria algo asi
if (Build.VERSION.SDK_INT >= 14)
mmr.setDataSource(link, new HashMap<String, String>());
else
mmr.setDataSource(link);

Prueba primero a compilar la app para la version 4.0 o anterior y ver si funciona, y si funciona ya sabes cual es el problema/solucion

EDIT: Por si luego lo necesitas y no lo encuentras o no te leo https://code.google.com/p/android/is...etail?id=35794
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #9  
Viejo 07/06/13, 20:01:52
Array

[xs_avatar]
berto1989
Usuario invitado
 
Mensajes: n/a

Buenas, compilando en 4.0 me sigue dando error

Con el:
 Cita:
if (Build.VERSION.SDK_INT >= 14)
mmr.setDataSource(link, new HashMap<String, String>());
else
mmr.setDataSource(link);
Me funciona, lo que pasa es que me devuelve null en todo

 Cita:
out += metaRetriever.extractMetadata(MediaMetadataRetriev er.METADATA_KEY_TITLE);
Cabe aclarar que yo conecto con una radio streaming y que el archivo es un listen.pls


Con un archivo .mp3 directo funciona perfectamente

Última edición por berto1989 Día 07/06/13 a las 20:06:39.
Responder Con Cita
  #10  
Viejo 07/06/13, 23:45:36
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
Mirando un poco mas he visto esto que no se si te servira como ultimo remedio http://stackoverflow.com/questions/1...31728#16931728

Aparte de eso el error imagino que sera porque no recojes por lo que sea el listen.pls, estas seguro de que esta ahi y de que es accesible por la app? Comprueba con un Log.d o lo que sea haber si de verdad contiene el .pls el metaRetriever, porque cuando haces la llamada al puerto de esa ip devuelve si o si el .pls? Si es asi no deberia haber error, pero si no devuelvo el archivo y devuelve una URL o un numero...
Aqui por ejemplo http://stackoverflow.com/questions/1...-setdatasource el error que tiene es que coje la musica de la carpeta raw y claro eso no es el archivo, es el numero de identificacion, entonces no se si a ti te estara pasando algo por el estilo.
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #11  
Viejo 08/06/13, 00:00:52
Array

[xs_avatar]
berto1989
Usuario invitado
 
Mensajes: n/a

Buenas, devolver devuelve una pagina, si le pongo el link directo al .pls crashea la aplicación.

Código:
06-07 21:57:57.683: E/AndroidRuntime(4777): FATAL EXCEPTION: main
06-07 21:57:57.683: E/AndroidRuntime(4777): java.lang.RuntimeException: setDataSource failed: status = 0x80000000
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at android.media.MediaMetadataRetriever._setDataSource(Native Method)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:99)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at es.xxxxx.xxxxx.xxxxx.cancion(xxxxx.java:233)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at es.xxxx.xxxx.xxxxx$4.onClick(xxxxxx.java:167)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at android.view.View.performClick(View.java:4204)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at android.view.View$PerformClick.run(View.java:17355)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at android.os.Handler.handleCallback(Handler.java:725)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at android.os.Handler.dispatchMessage(Handler.java:92)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at android.os.Looper.loop(Looper.java:137)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at java.lang.reflect.Method.invoke(Method.java:511)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-07 21:57:57.683: E/AndroidRuntime(4777): 	at dalvik.system.NativeStart.main(Native Method)
06-07 21:57:59.954: I/Process(4777): Sending signal. PID: 4777 SIG: 9
Yo encontre esto, pero no se por donde cogerlo :

http://stackoverflow.com/questions/8...g-online-radio
Responder Con Cita
  #12  
Viejo 08/06/13, 10:26:37
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
retrieveMetaData() es el metodo que te interesa a ti del link de stackoverflow, pero si lo que te devuelve es una pagina como a el es logico que no funcione porque MediaMetadataRetriever solo acepta estos tipos que haya leido
Playlist
- an .m3u, .pls, or .asx file containing links to individual audio tracks
SHOUTcast Playlist
- an .m3u, .pls, or .asx file containing links to SHOUTcast/Icecast server streams
SHOUTcast Stream
- a direct link to a SHOUTcast/Icecast server stream

Por lo que si le pasas una web tienes que sacar de la web el archivo .pls para reproducirlo que es lo que hace el chico ese con el metodo del retrieveMetadata()

Si lo pones el link directo al .pls y crashea puede que sea error como el que te decia kriogen de temas de conexion o cualquier otra cosilla tonta y que se pueda reparar facil pero seguramente sea menos seguro.
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #13  
Viejo 08/06/13, 10:37:10
Array

[xs_avatar]
berto1989
Usuario invitado
 
Mensajes: n/a

Ya cambiara el metodo, cuando hacen click en el boton los mando a otro public void fuera del oncreate, pero me sigue crasheando

Encontre esto:

http://androidworkz.com/2012/11/30/s...adata-example
Responder Con Cita
  #14  
Viejo 09/06/13, 11:17:49
Array

[xs_avatar]
berto1989
Usuario invitado
 
Mensajes: n/a

Buenas, con el ultimo link que puse e ido probando y donde parece que no me lee es aki

Código:
public void OnMetadataChanged(Metadata item) {

	        artistName = item.artist;
	        trackName = item.track;    
	        tab3.setText("Artista: " + artistName + "\nCanción: " + trackName);
		updateMeta();  
			
	    }
E ido metiendo un toastmake en cada apartado de esta zona, y aqui no se me muestra por lo que doy por echo que es ai el fallo

edito: solucionado

Última edición por berto1989 Día 09/06/13 a las 13:45:30.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 03:54:47 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /