我正在尝试创建我的第一个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();
}
}
});
}
}
任何帮助都将不胜感激,谢谢。
何时启动/暂停:
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());
编辑:我还没有找到将原始文件转换为文件描述符的方法,所以我使用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();
}
}
当媒体播放器停止时,也可以释放它。
您是否尝试重置MP?
if (sound.isPlaying()) {
sound.stop();
} else {
sound.reset();
sound.prepare();
sound.start();
}
已编辑。。。完整的状态图如下:http://developer.android.com/reference/android/media/MediaPlayer.html