2016-09-07 74 views
0

我试图返回媒体播放器的当前状态,因为我想检查媒体播放器还没有加载歌曲,所以我可以提供弹出窗口来选择音频文件。如何返回媒体播放器的状态?

代码在其他类

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) { 
       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(); 
       } 
      } 


     }); 

使用的答案,这是我想出了代码:

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恐怕没有这样的方法。你必须自己检查一下。使用MediaPlayer's StateDiagram跟随MeidaManager状态并不难。最简单的方法是声明一个boolean标志isPrepared/isReadyToPlay并将其设置为trueonPrepared()回调OnPreparedListener。

+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为服务类。