2017-09-06 1 views
0

i besoin d'implémenter une fonction de commutation pour passer du haut-parleur et earpiacecomment passer du haut-parleur et earpiace pendant la lecture audio

i utilisé ce code pour jouer dans earpiace

MediaPlayer mediaPlayer = new MediaPlayer(); 
mediaPlayer.setDataSource(this, Uri.parse("http://***.mp3")); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 
mediaPlayer.prepare(); 
mediaPlayer.start(); 

si l'utilisation AudioManager.STREAM_MUSIC au lieu de AudioManager.STREAM_VOICE_CALL fonctionne avec le haut-parleur. mais si je change rintime il n'y a pas de changements. c'est mon code

int currentPosition = mediaPlayer.getCurrentPosition(); 
mediaPlayer.stop(); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mediaPlayer.prepare(); 
mediaPlayer.seekTo(currentPosition); 
mediaPlayer.start(); 
+0

'setAudioStreamType' est dépréciée. Vous devriez utiliser 'setAudioAttributes' à la place. Aucun d'entre eux n'est efficace après l'appel à 'préparer 'ou' prepareAsync'. – Dave

+0

Une possibilité, maintenant que j'y pense, est d'appeler 'reset' après avoir appelé' stop'. C'est peut-être aussi simple. – Dave

+0

à propos de la dépréciation de setAudioStreamType: quelle est la bonne façon de faire cette chose compatible avant 21 api lev? – Xan

Répondre

2

Essayez de faire ceci:

int currentPosition = mediaPlayer.getCurrentPosition(); 
mediaPlayer.stop(); 
// The next two lines are added to your original code 
mediaPlayer.reset(); 
mediaPlayer.setDataSource(this, Uri.parse("http://***.mp3")); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mediaPlayer.prepare(); 
mediaPlayer.seekTo(currentPosition); 
mediaPlayer.start(); 
+0

cela a fonctionné mais de cette façon je télécharge le fichier chaque fois que je change de type de flux. il n'y a pas de meilleur moyen? – Xan

+0

Juste en utilisant le 'MediaPlayer', non, pas vraiment. Pas sans beaucoup de travail. Vous pouvez télécharger le fichier avant la lecture, puis lire à partir du fichier local. – Dave