2013-10-03 99 views
0

我有以下代码从网络播放mp3文件,这是行得通的,但是当我使用停止功能时,音频不会停止。任何人都可以指点我的资源,以了解更多关于此的信息,或告诉我我哪里出错了?谢谢。Android Mediaplayer不会停止

showAudio.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     MediaPlayer mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     if (!showAudio.getText().equals("Stop")) { 
      try { 
       String url = lblAudio.getText().toString(); 
       if (url.length() > 2) { 
        mediaPlayer.setDataSource(url); 
        mediaPlayer.prepare(); 
        mediaPlayer.start(); 
        showAudio.setText("Stop"); 
       } 
      } catch (Exception e) { 
       Toast.makeText(getBaseContext(), "Sorry, there was a problem playing audio.", Toast.LENGTH_SHORT).show(); 
      } 
     } else { 
      try { 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
      showAudio.setText("Audio"); 
     } 
    } 
}); 

回答

1

您正在创建每次新的MediaPlayer单击该按钮。在点击处理程序外部创建播放器。

+0

谢谢。我已经改变了这一点,它似乎有一次工作(它会播放和停止,但如果我再次按播放,我得到一个IllegalStateException)。 – Kevin

+1

非法状态异常是因为您正在释放播放器。查看[state diagram here](http://developer.android.com/reference/android/media/MediaPlayer.html)。在你正在调用'release'的地方调用'reset',并且由于你每次在'start'之前调用setDataSource'和'prepare',它都可以正常工作。实际完成播放器时调用'release',例如在'Activity'的'onStop'中。 – Dave

0

试用:

try { 
    if(mediaPlayer.isPlaying()) 
     { 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
     } 
     } catch(Exception ex) { 
      ex.printStackTrace(); 
     } 
+0

谢谢你工作的媒体播放器,我已经试过,但不幸的是,当我点击停止时音频仍在播放。 – Kevin

+0

您是否尝试过调试代码?它是否在这种情况下? – GrIsHu

+0

是的,我已经调试了代码,它正在进入状态。 @Dave所提出的建议似乎已经解决了这个问题,但音频只会播放和停止一次。 – Kevin

0

尝试使你的媒体播放器一个全局变量,并使其静态....

0

我有一个启动和停止

Uri ringtone; 
MediaPlayer mp; 

ringtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); 
     mp = MediaPlayer.create(getApplicationContext(), ringtone); 

    //code to start the mediaplayer 

    if (Flags.notificationReceived) { 
         showAlert(Flags.patientModel); 
         Flags.notificationReceived = false; 
         mp.start(); 
         mp.setLooping(true); 
         vibrate(2000); 
        } 

    //code to stop the media player 

    if (mp.isPlaying()) { 
         mp.stop(); 
         mp.reset(); 
         mp.release(); 
         mp = MediaPlayer.create(getApplicationContext(), ringtone); 


    }