我正在创建一个带有两个按钮开始/暂停和停止按钮的媒体播放器,当我第一次开始播放时它工作正常。但是当我试图在一次停止后启动时,我需要两次点击start / puase按钮。
我不明白这种行为。
以下是我的onclick代码:
public void click(View view){
int id = view.getId();
try {
mPlayer.setDataSource(PATH);
mPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
switch(id){
case R.id.btnPlay:
synchronized(this){
if(!isStarted){
btnPlay.setBackgroundResource(R.drawable.pause);
isStarted=true;
mPlayer.start();
System.out.println("Play");
} else{
System.out.println("Pause");
isStarted = false;
btnPlay.setBackgroundResource(R.drawable.play);
mPlayer.pause();
}
}
return;
case R.id.btnStop :
synchronized(this){
if(mPlayer!=null){
System.out.println("Stop");
mPlayer.stop();
isStarted = false;
btnPlay.setBackgroundResource(R.drawable.play);
}
}
这是我的布局xml文件:
<View
android:layout_width="0dip"
android:layout_height="0dip"
android:layout_weight="1" />
<Button
android:id="@+id/btnStop"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="@drawable/stop"
android:onClick="click" />
<Button
android:id="@+id/btnPlay"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="@drawable/play"
android:onClick="click" />
<View
android:layout_width="0dip"
android:layout_height="0dip"
android:layout_weight="1" />
<View
android:layout_width="0dip"
android:layout_height="0dip"
android:layout_weight="1" />
</LinearLayout>
请告诉我你的建议。
由于
阿曼
答案 0 :(得分:0)
不确定是否直接解决了您的问题,但是您不应该在每个切换案例的末尾添加break;
吗?我想把它放在评论中,但我还没有足够的代表,对不起。
答案 1 :(得分:0)
我在mplayer.stop();
找到的问题我只是将stop替换为暂停及其工作,我在代码中编辑的很少,曾经看过:
在onCreate中:
mPlayer = new MediaPlayer();
mPlayer = MediaPlayer.create(ThirdActivity.this,R.raw.test);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setLooping(true);
onClick事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
Log.d("^^^^^^", "flag=" + isStarted);
Log.d("^^^^^^", "clicked");
synchronized (this) {
if (!isStarted) {
add.setBackgroundResource(R.drawable.button);
isStarted = true;
mPlayer.start();
System.out.println("Play");
} else {
System.out.println("Pause");
isStarted = false;
add.setBackgroundResource(R.drawable.button);
mPlayer.pause();
}
}
break;
case R.id.button2:
synchronized (this) {
if (mPlayer.isPlaying()) {
System.out.println("Stop");
mPlayer.pause();
isStarted = false;
add.setBackgroundResource(R.drawable.button);
}
}
break;
default:
break;
}
}
即使查看以下链接。
答案 2 :(得分:0)
应仅在mPlayer.setDataSource(PATH);
状态下调用Idle
并在其他状态返回错误中调用它。
并且只应在mPlayer.prepare();
和Initialized
州内致电Stopped
。
我认为从Android开发者那里阅读此链接可以帮助您使用媒体播放器。------MediaPlayer-----
在您的情况下,您应该在调用mPlayer.prepare()之前检查媒体播放器是否已停止;并删除mPlayer.setDataSource(PATH);来自onClick()
。
希望这有助于你。