我的应用程序和1个媒体播放器中有25个按钮。我想要的:当我第一次点击播放声音时。当我第二次点击停止声音时 但是会发生什么:当我第一次点击它开始播放声音时,当我再次点击时,它不会停止它,而是从头开始再次播放它。 我的代码:
MediaPlayer mp;
if(mp!=null)
{
mp.release();
mp=null;
}
mp = MediaPlayer.create(MainActivity.this, R.raw.s5awesomeguitar);
mp.start();
如何设置我的代码,在第一次点击时播放Media Player,在第二次点击停止声音。在同一个按钮上 完整代码:
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch (position) {
case 0:
if(mp!=null)
{
mp.release();
mp=null;
}
else {
mp = MediaPlayer.create(Sadrzaj.this, R.raw.s3djclubmix);
mp.start();
}
break;
case 1:
if(mp!=null)
{
mp.release();
mp=null;
}
else {
mp = MediaPlayer.create(Sadrzaj.this, R.raw.s16dance);
mp.start();
}
break;
case 2:
if(mp!=null)
{
mp.release();
mp=null;
}
else {
mp = MediaPlayer.create(Sadrzaj.this, R.raw.s13ring);
mp.start();
}
break;
答案 0 :(得分:2)
MediaPlayer是状态机,here是Doc。
所以,首先,阅读文档,状态图说:release()=&gt;结束。
因此,如果您想使用不同的按钮控制相同的曲目,请不要拨打release();
并在您的案例之间设置mp = null;
。
Dhaval为您提供了正确的解决方案:
if (mp.isPlaying()) {
mp.pause()
} else {
mp.play()
}
另外,为了正确释放播放器,请先调用reset()然后释放(),否则你会收到警告说&#34;玩家去处理未经处理的事件。&#34;或类似的东西。
请确保您了解状态图,它将像魅力一样工作:)
总结:
阅读文档:)
检查播放器的播放状态
删除对release()
希望这有帮助!
编辑: 好的,这就是我要做的事情:(它可能无法编译,我这里只有一个文本编辑器,所以抱歉^^)
在你的活动中(我想): 您的活动必须实施onPreparedListener
@Override
onCreate() {
if(mMediaPlayer == null) {
mMediaPlayer = new MediaPlayer()
mMediaPlayer.setOnPreparedListener(this); //registers your activity as the onPrepared Listener
}
...
}
//Called back when media is ready to be played
@Override
onPrepared() {
if(mMediaPlayer != null){
mMediaPlayer.start();
}
}
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch (position) {
case 0:
..
break;
case 1:
if(mMediaPlayer.isPlaying() {
mMediaPlayer.pause();
} else {
mMediaPlayer.reset();
mMediaPlayer.setDataSource(Sadrzaj.this, R.raw.s16dance);
mMediaPlayer.prepareAsync();//call back onPrepared()
//mMediaPlayer.start(); sorry little mistake here no need to call start(); since it is called in onPrepared()
}
break;
default:
if(mMediaPlayer != null) {
mMediaPlayer.reset();
mMediaPlayer.release();
mMediaPlayer = null;
}
break;
}
}
//Release the player and de listener
@Override
onDestroy() {
if(mMediaPlayer != null) {
mMediaPlayer.setOnPreparedListener(null);
mMediaPlayer.reset();
mMediaPlayer.release();
mMediaPlayer = null
}
}
答案 1 :(得分:0)
您需要创建一个绑定到播放器的服务。该服务将是实际播放/改变音轨的服务,并且由于它们受到限制,因此玩家的活动将被更新。
答案 2 :(得分:0)
你没有提供太多信息,但我会给你逻辑。
if(ButtonClick % 2 == 0){
//Start playing the music
} else {
//Stop playing the music
}
或
int i = 1;
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(i == 1){
//StartPlaying music .play();
i = 2
} else if (i==2){
//StopPlaying the music .stop();
i = 1
}
}
});
我建议你使用第二种方法。
答案 3 :(得分:0)
检查媒体播放器是否正在播放,如果是,则更改逻辑以暂停播放。否则就这样做了。
答案 4 :(得分:0)
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mp.isPlaying()){
//StartPlaying music .play();
mp.pause();
} else {
mp.start();
}
}
});