AndroId MediaPlayer prepareAsync méthode
J'ai un problème étrange. J'utilise le prepareAsync méthode avec le MediaPlayer
, mais l'auditeur que j'ai déclaré juste n'est jamais déclenché. J'essaie de diffuser un live .mp3
nourrir, de l'Internet (station de radio). J'utilise une méthode inline pour l'auditeur, mais j'ai aussi essayé d'implémenter l'interface sans succès. Voici une partie de mon code :
Dans la section membre :
String url = "http://<my_url>.mp3";
MediaPlayer mediaPlayer = new MediaPlayer();
De L'Activité onCreate()
:
ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton);
playButton.setOnClickListener(this);
playButton.clearFocus();
playButton.setClickable(false);
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton);
playButton.setClickable(true);
mp.start();
}
});
preparePlayer();
Alors, voici la preparePlayer()
méthode :
private void preparePlayer() {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
Toast.makeText(
MyStreamActivity.this,
getResources().getString(R.string.erreurIllegalArgument),
Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IllegalStateException e) {
Toast.makeText(
MyStreamActivity.this,
getResources().getString(R.string.erreurIllegalState),
Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IOException e) {
Toast.makeText(
MyStreamActivity.this,
getResources().getString(R.string.erreurIO),
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
Et (juste pour le dossier), le onDetroy()
où je fais le nettoyage :
private void releaseMediaPlayer() {
if (mediaPlayer != null) {
if(mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
mediaPlayer = null;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
}
le journal dit rien sur ce qui se passe ou il y a des erreurs? Avez-vous la permission de les internets?
OriginalL'auteur Patrice Cote | 2012-04-24
Vous devez vous connecter pour publier un commentaire.
Vous définissez la
OnPreparedListener
dans votreActivity
'méthode de création et, plus tard, éventuellement, la création d'une nouvelleMediaPlayer
dans votrepreparePlayer()
méthode. Tout nouvellement crééMediaPlayer
's ont l'habitude de laprepareListener
ensemble. Vous pouvez également ajouter unerrorlistener
pour savoir ce qui se passe.Vous pouvez déplacer le
setOnPreparedListener
appeler à l'intérieur de laainsi que l'établissement d'un
setOnErrorListener
comme suit:S'il vous plaît changer
e.printStackTrace();
àEspère que cette aide, faites-nous savoir si vous avez des données de journal que ce sera également utile.
Merci! Très bien expliqué
OriginalL'auteur petey
S'est avéré, j'ai oublié de mentionner le "@Override" sur le dessus de ma méthode interne. Comme ceci :
Maintenant tout fonctionne très bien. Eh bien... presque, car cela prend une éternité à tampon...
assez vieux, mais je voudrais encore souligner que la @Override déclaration ne produit pas de code et, par conséquent, ne peut pas être une solution à l'une ou l'autre code. Voir stackoverflow.com/a/8545586/2177061 de référence.
Ce n'est probablement pas la cause de ce problème. Je suis maintenant d'avoir exactement le même problème et la définition de "substitution" n'aide pas. Alors que l'exemple de l'application n'a pas fait lui-même de toute façon.
@Override
est totalement optionnel en Java, que ce soit Android ou Swing ou Java EE. Ainsi, ce ne peut jamais être votre problèmeOriginalL'auteur Patrice Cote