1

初めてクリックすると音楽が再生され、もう一度クリックすると停止します。ただし、もう一度クリックすると、すべてのアクションの再生/停止が機能しません。

   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()プレーヤーがSTARTEDPREPAREDPAUSEDまたはの状態の場合にのみ呼び出すことができますPLAYBACK_COMPLETE。あなたの呼び出しはそれを状態reset()に戻しているため、失敗します。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 に答える