繁体   English   中英

仅使用MediaPlayer播放.mp3一次,不会循环播放

[英]Play .mp3 using MediaPlayer just one time and not loop

因此,我.mp3 in资产文件夹中有一个.mp3 in (我打算以后再添加更多),并且有一个简单的单击关联即可播放它:

public static MediaPlayer m = new MediaPlayer();

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

    Button button= (Button) findViewById(R.id.btnDrum);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                PlayMusic(v);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

}

private void PlayMusic(View v) throws IOException {
    try {
        if (m.isPlaying()) {
            m.stop();
            m.release();
            m = new MediaPlayer();
        }

        AssetFileDescriptor descriptor = getAssets().openFd(Kit.KickDrum);
        m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        descriptor.close();

        m.prepare();
        m.setVolume(1f, 1f);
        m.setLooping(true);
        m.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但是,每次我尝试单击按钮时,音乐都会循环播放! 我只需要玩一次就停 如何才能做到这一点?

谢谢!

您正在使用m.setLooping(true);将其设置为循环播放m.setLooping(true); 将其更改为false

试试这个代码

try {
            Uri mp3 = Uri.parse("url");
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(context, mp3);
            mediaPlayer.prepare(); // might take long! (for buffering, etc)
            mediaPlayer.start();
            mediaPlayer.setOnCompletionListener(onCompletionListener);
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

// onCompletionListerner

private OnCompletionListener onCompletionListener = new OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    mediaPlayer.release();
    mediaPlayer = null;
    }
 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM