0

アプリで音楽を再生しようとしています。[再生]ボタンをクリックすると再生できますが、停止ボタンをクリックしても音楽を停止できません。このコードを調べて問題を指摘してください。MediaPlayerのpause()を使用して音楽を一時停止しています。

public class MainActivity extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btn = (Button)findViewById(R.id.Start);
    btn.setOnClickListener(this);

    Button btn1 =(Button)findViewById(R.id.stop);
    btn1.setOnClickListener(this);

}
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    MediaPlayer mp = MediaPlayer.create(this, R.raw.test_cbr);
    switch(v.getId()){
        case R.id.Start:                
            mp.start();
        break;
        case R.id.stop:
            mp.pause();
            Toast.makeText(getApplicationContext(), "Music Paused", Toast.LENGTH_SHORT).show();
        }
    }

     }

警告メッセージを使用しています。このアラートメッセージが表示されますが、音楽を一時停止できません。

4

4 に答える 4

1

このようにコードを変更して、

public class MainActivity extends Activity implements OnClickListener {
 MediaPlayer mp =null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   mp = MediaPlayer.create(this, R.raw.test_cbr);  
    Button btn = (Button)findViewById(R.id.Start);
    btn.setOnClickListener(this);

    Button btn1 =(Button)findViewById(R.id.stop);
    btn1.setOnClickListener(this);

}
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

    switch(v.getId()){
        case R.id.Start:   

            mp.start();
        break;
        case R.id.stop:
           if(mp!=null && mp.isPlaying()){
                mp.pause();
       Toast.makeText(getApplicationContext(), "Music Paused", Toast.LENGTH_SHORT).show();
            }

        }
    }

     }

問題は、onClickで毎回新しいメディアプレーヤーのインスタンスを作成しているため、前に作成したインスタンスがすでに再生されているが、新しく作成されたものを停止しようとしていることが原因である可能性があります。

したがって、グローバルに割り当てて、スタートボタンだけで新しく開始するだけでうまくいくはずです。

于 2013-01-22T06:55:41.660 に答える
1

MediaPlayerこれは、クリックするたびに新しいインスタンスを作成しているためです。

のインスタンスは1つだけにする必要がありますMediaPlayer

于 2013-01-22T06:56:46.560 に答える
0

メディアプレーヤーのたびに新しいインスタンスを作成しています。グローバルにします。

コードでこの変更を試してください。

case R.id.stop:
     if(mp.isPlaying() && mp!=null)
     { 
       mp.pause();
     }
     Toast.makeText(getApplicationContext(), "Music Paused", Toast.LENGTH_SHORT).show();
于 2013-01-22T06:55:37.557 に答える
0
switch (whatsong) {

    case 1: 
        if(song1.isPlaying()){
            song1.pause();          
        }
于 2013-01-22T06:56:16.910 に答える