需要Android Mediaplayer播放/停止帮助

Hai*_*rzo 2 audio android playback media-player

我正在尝试创建我的第一个Android应用程序,我想在这里完成的是播放声音,然后通过相同的按钮停止它.

它有点起作用,因为它在我点击它时播放声音,当我再次点击它时停止但是当我第三次点击它再次开始声音时不会播放.

我最终会在这里发出一些声音,所以我想知道我的项目是如何正确布局的?我可以节省一些时间吗?我有错误的方法吗?

package test.soundy.com;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class TestActivity extends Activity {
private MediaPlayer sound;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    sound = MediaPlayer.create(Test.this, R.raw.sound1);  

    Button test = (Button)this.findViewById(R.id.button1);
    test.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (sound.isPlaying()) {
                sound.stop();
            } else {
                sound.start();
            }
        }
    });


}
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,谢谢.

小智 6

开始/暂停时:

if(sound.isPlaying()){
    sound.pause();
}else{
    sound.start();
}
Run Code Online (Sandbox Code Playgroud)

开始/停止时:

if(sound.isPlaying()) {
    sound.stop();
} else {
    sound.reset();
    sound.setDataSource(yourURL);  //or InputStream etc.
    sound.prepare();
    sound.start();
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用sound.seekTo(time)跳到某个位置.记住,当你要玩一个新的声音(或重新启动),你应该先reset,setDataSource,prepare然后start它.

编辑:获取FileDescripter

AssetManager assetManager=Context.getAssets();
AssetFileDescriptor fileDescriptor = assetManager.openFd("a2.mp3");
mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)

编辑:我还没有找到一种方法将原始文件转换为filedescriptor所以我使用MediaPlayer的静态方法

MediaPlayer  mediaPlayer = MediaPlayer.create(Activity.this,R.raw.a1);
mediaPlayer.setOnCompletionListener(new musicCompletionListener());
mediaPlayer.start();
private class musicCompletionListener implements OnCompletionListener {
    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        mediaPlayer.release();
    }
}
Run Code Online (Sandbox Code Playgroud)

当它停止时释放媒体播放器.