2016-08-30 8 views
0

私のサーバーからオーディオをストリーミングしています。私はprepareAsync()herethisの答えを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(); 
    } 

} 

答えて

0

をし、同じスレッドでprepareAsync()を呼び出します。メディアプレーヤーが準備を終えると(しばしばバッファリング)、別のスレッド(ネイティブスレッド)を通してアプリケーションonPreparedListener()に通知します。

関連する問題