0
私のサーバーからオーディオをストリーミングしています。私はprepareAsync()hereとthisの答えをstackoverflowからのドキュメントを通って、それは呼び出し元のUIスレッドとは異なるスレッドで行われていると言います。prepareAsync()のために異なるスレッドでメディアストリーミングを呼び出す
私の質問では、新しいスレッドでオーディオストリーミングのタスクを呼びかけたり、prepareAsync()が新しいスレッド自体で行われているため、同じスレッドで続行する必要があります。私はMediaPlayerのクラスを呼び出すための新しいスレッドを作成していない私のコード追加してい参照目的のために
:あなたが先に行くことができ
Calling Class
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String url = "http://arqamahmad.com/music_app/bensound-cute.mp3";
if(Player.player == null){
new Player();
}
Player.player.playStream(url);
}
});
Player Class
public class Player {
MediaPlayer mediaPlayer = new MediaPlayer();
public static Player player;
String url = "";
public Player(){
this.player = this;
}
public void playStream (String url){
if(mediaPlayer != null){
try{
mediaPlayer.stop();
}catch (Exception e){
}
mediaPlayer = null;
}
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(url);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();// Starting only when it is prepared
}
});
mediaPlayer.prepareAsync();//Doing in the background thread
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
}