如何在Android中自动播放/停止默认声音?

时间:2017-01-18 14:36:09

标签: android audio android-mediaplayer

我想按照以下规则播放和停止默认声音:

  1. 如果没有播放声音,请在10秒内播放。
  2. 如果声音正在播放,请将其停止并在第一个位置播放。
  3. 基于以上规则,我设计了如下函数:

    public MediaPlayer mp =null;
    public void playDefaultSound(){
       Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
       mp = MediaPlayer.create(getApplicationContext(), notification);
       try {
           if (mp.isPlaying()) {
           mp.stop();
           mp.release();
           mp = MediaPlayer.create(getApplicationContext(), notification);
           }
           mp.start();
           Handler handler = new Handler();
           handler.postDelayed(new Runnable() {
           public void run() {
                mp.stop();
                mp.release();
              }
           }, 10000);
           } catch (Exception e) {
           e.printStackTrace();
           }
    }
    

    但是有时候我仍然会听两个声音正在播放(如果是第一个声音播放,我再次调用playDefaultSound()函数)。您认为删除mp = MediaPlayer.create(getApplicationContext(), notification);以下mp.release()是否正确?我怎样才能纠正这些规则以满足这些规则?谢谢大家

1 个答案:

答案 0 :(得分:1)

final MediaPlayer mp = new MediaPlayer();   
public void playDefaultSound(){
       Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
       try {
           if (mp != null && mp.isPlaying()) {
               mp.seekTo(0);
           } else {
               mp.reset();
               mp.setDataSource(getApplicationNotification(), notification);
               mp.start();
               Handler handler = new Handler();
               handler.postDelayed(new Runnable() {
                   public void run() {
                       mp.stop();
                       mp.release();
                   }
               }, 10000);
       } catch (Exception e) {
           e.printStackTrace();
       }
    }
P.S. - Always see the state diagram or lifecycle of things whenever stuck.

Ref : [Android Media Player State Diagram][1]


  [1]: https://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram "MediaPlayer State Diagram"