2016-09-07 15 views
0

私はオーディオファイルを選択するポップアップを提供できるように、メディアプレーヤーは、まだ曲をロードしていないことを確認したいので、私はメディアプレーヤーの現在の状態を返すようにしようとしています。オーディオファイルが答えを使用してメディアプレーヤーの状態を返す方法は?

sound.button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       if(//no audio file loaded){ 
        Intent intent = new Intent(MainActivity.this, Pop.class); 
        startActivityForResult(intent, PICK_AUDIO_REQUEST); 
       } 
       else if(sound.mp.isPlaying()) { 
        sound.mp.pause(); 
       } 
       else{ 
        sound.mp.seekTo(0); 
        sound.mp.start(); 
       } 
      } 


     }); 

をロードされている場合、他のクラスの

コード

public Sound(int buttonID, Activity _activity) { 
     super(); 
     this.activity = _activity; 
     button = (Button) activity.findViewById(buttonID); 
     mp = new MediaPlayer(); 
    } 

コードをチェックするために、これは私が思い付いたコードは次のとおりです。

sound.button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       sound.mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mediaPlayer) { 
         isPrepared = true; 
        } 
       }); 

       if(!isPrepared){ 
        Intent intent = new Intent(MainActivity.this, Pop.class); 
        startActivityForResult(intent, PICK_AUDIO_REQUEST); 
       } 
       else if(sound.mp.isPlaying()) { 
        sound.mp.pause(); 
       } 
       else{ 
        sound.mp.seekTo(0); 
        sound.mp.start(); 
       } 
      } 


     }); 

答えて

0

Iそのような方法がないことを恐れている。あなたはそれを自分で確認する必要があります。 MeidaManagerの状態をMediaPlayer's StateDiagramにするのはあまり難しくありません。最も簡単な方法は、booleanフラグisPrepared/isReadyToPlayを宣言し、OnPreparedListenerのonPrepared()コールバックでtrueにそれを設定することです。

+0

私はダミーファイルをロードして、それはそれを上書きするためにありますかどうかをチェックすることを考えています。しかしそれはそれほどエレガントではないでしょうか?または、あなたのソリューションにonpreparedlistenerでどのように織り成すのですか? – Sterisk

+0

サウンドデータソース( 'url' /' uri')を変更するたびに、 'MediaManager'を再準備する必要があります。別の方法はありません。 –

+0

だから、私はどこにonpreparedlistenerを置くだろうか? – Sterisk

1

おそらく次は...

MediaPlayer.setOnBufferingUpdateListener(...); 

    public void onBufferingUpdate(MediaPlayer mp, int percent) 
    { 
    //while MediaPlayer's buffer been update 
    } 

MediaPlayer.setOnPreparedListener(...); 

    public void onPrepared(MediaPlayer mp) 
    { 
    //while MediaPlayer is ready to play 
    } 

MediaPlayer.setOnCompletionListener(...); 

    public void onCompletion(MediaPlayer mp) 
    { 
    //while MediaPlayer played to the end 
    } 

MediaPlayer.setOnErrorListener(...); 

    public boolean onError(MediaPlayer mp, int what, int extra) 
    { 
    //while MediaPlayer has error ocurred 
    } 

また、あなたのクラスがOnAudioFocusChangeListenerを実装し、以下の方法

public boolean requestAudioFocus() 
{} 

public boolean abandonAudioFocus() 
{} 

public void onAudioFocusChange(int focusChange) 
{} 

を作成する必要がありますが、サービスクラスにあなたのMediaPlayerを置くと考えて助けることができます。

関連する問題