使用 android 媒体播放器重复播放音乐一定 x 次

kot*_*D K 1 android loops for-loop android-mediaplayer

在我的应用程序中,用户选择 1、21、51、101、108 之类的计数,就像他使用按钮或单选按钮选择时一样,媒体播放器必须重复多次。如果他选择 21,媒体播放器应该重复播放音乐 21 次。在我的代码中,如果我在 for 循环中使用 while 循环,它会阻塞 UI,不允许停止或暂停播放,如果我没有使用 while 循环,它只会播放一次。请我需要解决它,任何人都会提前感谢。下面我发布了我的整个代码

public class MainActivity extends Activity implements OnClickListener{
    private MediaPlayer mp;
    int count;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        findViewById(R.id.button_1).setOnClickListener(this);
        findViewById(R.id.button_2).setOnClickListener(this);
        findViewById(R.id.button_3).setOnClickListener(this);
        findViewById(R.id.button_4).setOnClickListener(this);
        findViewById(R.id.button_5).setOnClickListener(this);
        findViewById(R.id.pause).setOnClickListener(this);
        findViewById(R.id.stop).setOnClickListener(this);

    }

    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.button_1:
            if (mp!=null) {
                mp.release();
            }

            player(3);

            break;
        case R.id.button_2:
            if (mp!=null) {
                mp.release();
            }
            player(21);

            break;
        case R.id.button_3:
            if (mp!=null) {
                mp.release();
            }
            player(51);

            break;
        case R.id.button_4:
            if (mp!=null) {
                mp.release();
            }
            player(108);

            break;
        case R.id.button_5:
            if (mp!=null) {
                mp.release();
            }

            break;
        case R.id.pause:

                mp.pause();


            break;
        case R.id.stop:

                mp.stop();


            break;

        }


    }

    private void player(int count) {
        // TODO Auto-generated method stub
        mp = MediaPlayer.create(this, R.raw.a);

         for (int i=1; i<=count ; i++){
             mp.start();
             while(mp.isPlaying());
     }
        // mp.release();





 }  
    @Override
    protected void onDestroy() {
        if(null!=mp){
            mp.release();
        }
        super.onDestroy();
    }

}
Run Code Online (Sandbox Code Playgroud)

Zub*_*ber 5

您可以通过设置一个 yourCount 整数来实现这一点,该整数包含您要重复声音的数字,而不是简单地执行此操作

    int count = 0;
    mp.setOnCompletionListener(new OnCompletionListener()

        @Override
        public void onCompletion(MediaPlayer mp) {
            if (count < yourCount) {
                mp.start();
                count++;
            }
        }
    });
    mp.start();
Run Code Online (Sandbox Code Playgroud)