我正在尝试创建我的第一个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();
}
}
});
}
}
非常感谢任何帮助,谢谢。
答案 0 :(得分:6)
开始/暂停时:
if(sound.isPlaying()){
sound.pause();
}else{
sound.start();
}
开始/停止时:
if(sound.isPlaying()) {
sound.stop();
} else {
sound.reset();
sound.setDataSource(yourURL); //or InputStream etc.
sound.prepare();
sound.start();
}
您也可以使用sound.seekTo(time)
跳到某个位置。
请记住,当您想要播放新的声音(或重新启动)时,您应首先reset
,setDataSource
,prepare
然后再start
。
编辑:获取FileDescripter
AssetManager assetManager=Context.getAssets();
AssetFileDescriptor fileDescriptor = assetManager.openFd("a2.mp3");
mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor());
编辑:我还没有找到将原始文件转换为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();
}
}
同时在停止播放时释放媒体播放器。
答案 1 :(得分:0)
您是否尝试重置MP?
if (sound.isPlaying()) {
sound.stop();
} else {
sound.reset();
sound.prepare();
sound.start();
}
...编辑 完整的状态图如下:http://developer.android.com/reference/android/media/MediaPlayer.html