Je construis une application Android qui diffusera plusieurs stations de radio d'un pays latin. Il y a environ 10 stations qui, je le sais, peuvent être lues sur Android. parce qu’il est mort) mais le problème que j’ai, c’est que la lecture dure plusieurs secondes, puis elle s’arrête de continuer à se charger mais ne redémarre pas la lecture en continu.
J'ai donc trouvé cet échantillon et ça marche pour moi, le voici si vous avez le même problème:
dans 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();
}
}
}
dans le code 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>
et le manifeste Android:
<?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>
Eh bien, si vous vous attendez à une barre de progression, vous êtes déçus, c'est un flux qui, par défaut, n'a pas le temps de se terminer est sans fin. À propos de l'URL, vous pouvez utiliser le point de montage dans le serveur shoutcast2/icecast et le/dans le shoutcast1.
Dans onResume ou WRVR vous voulez! Collez ce code.
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();
}
});
Dans le fichier manifest.xml, ajoutez l'autorisation Internet.
<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>