2011-12-09 8 views
0

私はラジオストリーミングアプリをやっています。私はストリームが始まる前に、フレームアニメーションでローディングバーフレームを表示しようとしています。アニメーションはストリームを再生した後に開始されます。ストリームが読み込まれる前にアニメーションを表示するにはどうすればいいですか?ここに私のコードスニペットがあります。ヘルプAndroidがストリーミング中にアニメーションが前面に表示されない理由

 bhajan_play.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      ConnectivityManager conMan = (ConnectivityManager)   getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo Info = conMan.getActiveNetworkInfo(); 
      if (Info == null) { 
       Toast.makeText(BhajanStream.this, "POOR SIGNALS ", 
         Toast.LENGTH_LONG).show(); 
       // startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
      } 

      else { 

       loadanim.setBackgroundResource(R.drawable.loader_1); 
       loadanim.setBackgroundResource(R.anim.loadanim); 
       loadanimation = (AnimationDrawable) loadanim 
         .getBackground(); 
       loadanimation.isVisible(); 
       effectanim.setBackgroundResource(R.drawable.effect_1); 
       effectanim.setBackgroundResource(R.anim.musiceffect); 
       effectanimation = (AnimationDrawable) effectanim 
         .getBackground(); 
       bhajan_play.setBackgroundResource(R.drawable.bhajan_start); 
       bhajan_play.setVisibility(View.GONE); 
       bhajan_stop.setVisibility(View.VISIBLE); 
       loadanim.setVisibility(View.VISIBLE); 
       effectanim.setVisibility(View.VISIBLE); 
      } 

      try { 
       mediaPlayer.reset(); 
       mediaPlayer.setDataSource(rs_bhajan_uri); 
      } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      try { 
       mediaPlayer.prepare(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      mediaPlayer.start(); 

     } 

    }); 

     } 

protected void onPreExecute() { 
    // UI work allowed here 

    loadanimation.start(); 
     } 

答えて

1

あなただけprepare()ではなくprepareAsync()を呼び出す必要があります...感謝されます。 MediaPlayer documentationから

ストリームのために、あなたではなく、十分なデータがバッファリングされるまでブロックするよりも、すぐに を返しprepareAsyncを()、呼び出す必要があります。

実装例(データが準備されるまで、あなたの意見を更新する準備が完了するまで待たなければならないことを意味し、あなたのUIスレッドをブロックします準備を呼び出す):

mediaPlayer.prepareAsync(); 
    mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
+0

@DAVEをI prepareAsync()を使用しましたが、オーディオは再生されていません。どうして? –

+0

prepareAsyncを使用すると、別のスレッドでプレーヤが準備されます。準備中であっても、即座に戻ります。 OnPreparedListenerをプレーヤーに設定し、そのonPrepared()メソッドが呼び出されたときに再生を開始する必要があります。 – Jave

+0

@Daveは私のスニペットを上記のように編集することができます –

関連する問題