Aplicación de streaming de radio en línea para Android

Estoy construyendo una aplicación para Android que transmitirá varias estaciones de radio de un país latino, hay 10 estaciones que sé que se pueden reproducir en android, tengo la URL de ellos y en realidad les hizo trabajar con este tutorial (enlace eliminado, Porque está muerto), pero el problema que tengo es que se reproduce durante varios segundos y luego se detiene sigue cargando pero no reinicia el streaming, mis preguntas:

  • Si alguien ha trabajado con este tutorial puede explicarme cómo hacerlo fluir constantemente sin parar.
  • ¿Hay una manera más fácil de transmitir audio de radio? Este tutorial parece un poco antiguo, ¿hay un nuevo tutorial o una muestra de código más reciente para estudiar o usar?
  • ¿Puede alguien enviarme el camino correcto?

Así que encontré esta muestra y funciona para mí, aquí es si usted tiene el mismo problema:

En myMain.java

import android.app.Activity; import android.os.Bundle; import java.io.IOException; import android.media.MediaPlayer; import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnPreparedListener; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; public class myMain extends Activity implements OnClickListener { private ProgressBar playSeekBar; private Button buttonPlay; private Button buttonStopPlay; private MediaPlayer player; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initializeUIElements(); initializeMediaPlayer(); } private void initializeUIElements() { playSeekBar = (ProgressBar) findViewById(R.id.progressBar1); playSeekBar.setMax(100); playSeekBar.setVisibility(View.INVISIBLE); buttonPlay = (Button) findViewById(R.id.buttonPlay); buttonPlay.setOnClickListener(this); buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay); buttonStopPlay.setEnabled(false); buttonStopPlay.setOnClickListener(this); } public void onClick(View v) { if (v == buttonPlay) { startPlaying(); } else if (v == buttonStopPlay) { stopPlaying(); } } private void startPlaying() { buttonStopPlay.setEnabled(true); buttonPlay.setEnabled(false); playSeekBar.setVisibility(View.VISIBLE); player.prepareAsync(); player.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { player.start(); } }); } private void stopPlaying() { if (player.isPlaying()) { player.stop(); player.release(); initializeMediaPlayer(); } buttonPlay.setEnabled(true); buttonStopPlay.setEnabled(false); playSeekBar.setVisibility(View.INVISIBLE); } private void initializeMediaPlayer() { player = new MediaPlayer(); try { player.setDataSource("http://usa8-vn.mixstream.net:8138"); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } player.setOnBufferingUpdateListener(new OnBufferingUpdateListener() { public void onBufferingUpdate(MediaPlayer mp, int percent) { playSeekBar.setSecondaryProgress(percent); Log.i("Buffering", "" + percent); } }); } @Override protected void onPause() { super.onPause(); if (player.isPlaying()) { player.stop(); } } } 

En el código XML (main.xml):

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Source: (Radio La Chevere)" android:layout_marginTop="10dip" android:gravity="center" /> <ProgressBar android:id="@+id/progressBar1" android:indeterminateOnly="false" android:progressDrawable="@android:drawable/progress_horizontal" android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal" android:minHeight="20dip" android:maxHeight="20dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:layout_marginTop="10dip"></ProgressBar> <LinearLayout android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:layout_width="match_parent" android:layout_marginTop="20dip" android:gravity="center"> <Button android:text="Play" android:id="@+id/buttonPlay" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Stop" android:id="@+id/buttonStopPlay" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout> </LinearLayout> 

Y el manifiesto androide:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="package.your.RadioStream" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".myMain" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

Bueno, si esperas una barra de progreso, te disapointing, este es un flujo, que por defecto no tiene tiempo para terminar es interminable. Acerca de la URL, puede utilizar el punto de montaje en el servidor shoutcast2 / icecast y / en el archivo shoutcast1.

En onResume o wrvr que desea! Pegue este código.

  String url = "http://server2.crearradio.com:8371"; // your URL here final MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataSource(url); } catch (IOException e) { e.printStackTrace(); } try { mediaPlayer.prepare(); // might take long! (for buffering, etc) } catch (IOException e) { e.printStackTrace(); } mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); 

En el manifest.xml agregue el permiso de Internet.

 <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
  • Cómo cambiar el User-agent por defecto en mediaplayer del android
  • Cómo reproducir un archivo cifrado en Android
  • Android ExoPlayer: ¿Resuelve el problema de reproducción sin interrupciones / sin fisuras que está roto para el reproductor de medios Android
  • ¿Cómo reproducir los archivos de audio directamente de la carpeta res / raw?
  • Android lo que hace exactamente error mediaplayer 1, -107
  • Error de MediaPlayer de Android (1, -38) y (-38, 0)
  • ¿Cuál es la mejor manera de obtener una duración de archivo de audio en Android?
  • Cambiar la fuente de datos para la reproducción de audio usando MediaPlayer existente?
  • Android Detener música de fondo cuando la tecla Inicio presionada
  • Cómo obtener el tipo de contenido de ShoutCast 7.html
  • ¿Cómo apoyar MOV (tiempo rápido) en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.