1

我正在使用一个带有 PLAY 和 STOP 两个动作的按钮“音乐”,当我第一次点击音乐播放时,当我再次点击它时它就停止了。但是,当我第二次单击时,所有操作 PLAY/STOP 都不起作用。

   public class Home extends Activity {
      boolean isMediaOn=false; 
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


      final ImageButton music=(ImageButton)findViewById(R.id.music);
      final MediaPlayer sound=MediaPlayer.create(Accueil.this,R.raw.star);      

      music.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

                        //  play
              if(isMediaOn==false) 
              { 

              System.out.println("PLAY");

              sound.start();

              music.setImageResource(R.drawable.music);

              isMediaOn=true; 
              } 
                       // stop 
              else 
              { 

                System.out.println("STOP");
                if(sound.isPlaying()){
                    sound.reset();
                    sound.stop();

                }

              music.setImageResource(R.drawable.no_music);

              isMediaOn=false; 
              } 

      } 
      });

这是我的 logcat 的屏幕截图: 在此处输入图像描述

4

4 回答 4

0

http://developer.android.com/reference/android/media/MediaPlayer.html#stop中明确指出 '一旦处于停止状态,直到调用 prepare() 或 prepareAsync() 来设置播放才能开始将 MediaPlayer 对象再次变为 Prepared 状态。

public class Home extends Activity {
  boolean isMediaOn=false; 
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);


  final ImageButton music=(ImageButton)findViewById(R.id.music);
  final MediaPlayer sound=MediaPlayer.create(Accueil.this,R.raw.star);      

  music.setOnClickListener(new OnClickListener() { 
  public void onClick(View v) { 

                    //  play
          if(isMediaOn==false) 
          { 

            System.out.println("PLAY");
            try {
               sound.prepare();
            } catch (Exception e) {
            Log.d(Settings.debug, e.toString());
          }
          sound.start();

          music.setImageResource(R.drawable.music);

          isMediaOn=true; 
          } 
                   // stop 
          else 
          { 

            System.out.println("STOP");
            if(sound.isPlaying()){
                sound.reset();
                sound.stop();

            }

          music.setImageResource(R.drawable.no_music);

          isMediaOn=false; 
          } 

  } 
  });
于 2012-08-07T12:08:06.553 回答
0

stop()只有当玩家处于 、 或 状态时STARTED,您PREPARED才能调用。您的电话正在使其恢复状态,导致失败。PAUSEDPLAYBACK_COMPLETEreset()IDLEstop()

于 2012-08-05T16:50:32.513 回答
0

您可能想使用 pause(),如sound.pause();

pause() 方法暂停播放并维护所有其他播放器状态(例如正在播放的文件、文件中的位置等)。

于 2012-08-05T16:52:08.057 回答
-1

试试这个,希望对你有帮助。

   final ImageButton music=(ImageButton)findViewById(R.id.music);
   final MediaPlayer sound=MediaPlayer.create(Accueil.this,R.raw.star);
   music.setOnClickListener(new OnClickListener() { 

   public void onClick(View v) { 
       if(sound.isPlaying()){
          sound.stop();
          music.setImageResource(R.drawable.no_music);

       } else {
         sound.start();
         music.setImageResource(R.drawable.music);

       }
  });
于 2012-08-08T05:12:46.237 回答