关于MediaPlayer这个类的问题

Saraphines 2012-03-20 09:20:35
我设计了4个RaidoButton 然后对4个 进行监听 然后一选择后播放 地区方言 以前没用过 MediaPlayer

MediaPlayer 是否可以这么写

虽然可以做到 播放下一个音效 然后停止上一个音效 但是

问题来了 如果播放完整的音效 再选择的时候 却报错了.

public void onClick(View v) {
// TODO Auto-generated method stub
String media = titls;
switch (v.getId()) {
case R.id.radioButton1:
if (rbtPt.isChecked()) {
rbtPt.setChecked(true);
rbtGd.setChecked(false);
rbtSc.setChecked(false);
rbtKa.setChecked(false);
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
}
if (media.equals("开会")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.meeting_tw);
} else if (media.equals("开车")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.car_tw);
} else if (media.equals("出差")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.travel_tw);
} else if (media.equals("培训")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.train_tw);
} else if (media.equals("手机没电")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.nobattery_tw);
} else if (media.equals("运动")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.sport_tw);
} else if (media.equals("不方便接听")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.nocall_tw);
}
mediaPlayer.start();

}
break;
case R.id.radioButton2:
if (rbtGd.isChecked()) {
rbtPt.setChecked(false);
rbtGd.setChecked(true);
rbtSc.setChecked(false);
rbtKa.setChecked(false);
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
}
if (media.equals("开会")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.meeting_yy);
} else if (media.equals("开车")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.car_yy);
} else if (media.equals("出差")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.travel_yy);
} else if (media.equals("培训")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.train_yy);
} else if (media.equals("手机没电")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.nobattery_yy);
} else if (media.equals("运动")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.sport_yy);
} else if (media.equals("不方便接听")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.nocall_yy);
}
mediaPlayer.start();

}
break;
case R.id.radioButton3:
if (rbtSc.isChecked()) {
rbtPt.setChecked(false);
rbtGd.setChecked(false);
rbtSc.setChecked(true);
rbtKa.setChecked(false);
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
}
if (media.equals("开会")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.meeting_sc);
} else if (media.equals("开车")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.car_sc);
} else if (media.equals("出差")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.travel_sc);
} else if (media.equals("培训")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.train_sc);
} else if (media.equals("手机没电")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.nobattery_sc);
} else if (media.equals("运动")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.sport_sc);
} else if (media.equals("不方便接听")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.nocall_sc);
}
mediaPlayer.start();

}
break;
case R.id.radioButton4:
if (rbtKa.isChecked()) {
rbtPt.setChecked(false);
rbtGd.setChecked(false);
rbtSc.setChecked(false);
rbtKa.setChecked(true);
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
}
if (media.equals("开会")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.meeting_db);
} else if (media.equals("开车")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.car_db);
} else if (media.equals("出差")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.travel_db);
} else if (media.equals("培训")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.train_db);
} else if (media.equals("手机没电")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.nobattery_db);
} else if (media.equals("运动")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.sport_db);
} else if (media.equals("不方便接听")) {
mediaPlayer = MediaPlayer.create(Scenese.this,
R.drawable.nocall_db);
}
mediaPlayer.start();
}
break;
case R.id.back4:
finish();
break;
case R.id.but_ci_intent:
break;
case R.id.but_ci_del:
finish();
break;
}

mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
try {
mp.release();
} catch (Exception e) {
e.printStackTrace();
}
}
});
mediaPlayer.setOnErrorListener(new OnErrorListener() {

public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
try {
mp.release();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
});
...全文
597 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saraphines 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chen515272204 的回复:]

这个是状态出错了,start()方法最好放在MediaPlayer.OnPreparedListener接口中调用保险一些。

楼主最好还是自己看看MediaPlayer API,理清MediaPlayer这个类的几个状态,类中的一些监听接口。
[/Quote]
好的 谢谢了 我试试看 初学android 有的不太懂
demo_ 2012-03-20
  • 打赏
  • 举报
回复
这个是状态出错了,start()方法最好放在MediaPlayer.OnPreparedListener接口中调用保险一些。

楼主最好还是自己看看MediaPlayer API,理清MediaPlayer这个类的几个状态,类中的一些监听接口。
Saraphines 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chen515272204 的回复:]

另外提下 楼主你的代码实在太长啦,看起来很费劲哦
[/Quote]
可以省略=-= 我现在 把基本实现了再 简化
Saraphines 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chen515272204 的回复:]

查看下logcat中报错的信息吧,搞不清楚可以直接把错误导入文件,直接复制google下也行哦。
[/Quote]
这个是报错

03-20 11:07:04.388: E/AndroidRuntime(29703): FATAL EXCEPTION: main
03-20 11:07:04.388: E/AndroidRuntime(29703): java.lang.IllegalStateException
03-20 11:07:04.388: E/AndroidRuntime(29703): at android.media.MediaPlayer.isPlaying(Native Method)
03-20 11:07:04.388: E/AndroidRuntime(29703): at com.eastcom.intelligentanswer.ui.Scenese.onClick(Scenese.java:111)
03-20 11:07:04.388: E/AndroidRuntime(29703): at android.view.View.performClick(View.java:2538)
03-20 11:07:04.388: E/AndroidRuntime(29703): at android.widget.CompoundButton.performClick(CompoundButton.java:105)
03-20 11:07:04.388: E/AndroidRuntime(29703): at android.view.View$PerformClick.run(View.java:9152)
03-20 11:07:04.388: E/AndroidRuntime(29703): at android.os.Handler.handleCallback(Handler.java:587)
03-20 11:07:04.388: E/AndroidRuntime(29703): at android.os.Handler.dispatchMessage(Handler.java:92)
03-20 11:07:04.388: E/AndroidRuntime(29703): at android.os.Looper.loop(Looper.java:130)
03-20 11:07:04.388: E/AndroidRuntime(29703): at android.app.ActivityThread.main(ActivityThread.java:3691)
03-20 11:07:04.388: E/AndroidRuntime(29703): at java.lang.reflect.Method.invokeNative(Native Method)
03-20 11:07:04.388: E/AndroidRuntime(29703): at java.lang.reflect.Method.invoke(Method.java:507)
03-20 11:07:04.388: E/AndroidRuntime(29703): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
03-20 11:07:04.388: E/AndroidRuntime(29703): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
03-20 11:07:04.388: E/AndroidRuntime(29703): at dalvik.system.NativeStart.main(Native Method)

demo_ 2012-03-20
  • 打赏
  • 举报
回复
另外提下 楼主你的代码实在太长啦,看起来很费劲哦
demo_ 2012-03-20
  • 打赏
  • 举报
回复
查看下logcat中报错的信息吧,搞不清楚可以直接把错误导入文件,直接复制google下也行哦。
Saraphines 2012-03-20
  • 打赏
  • 举报
回复
有用过的朋友在么!帮帮忙吧!
Saraphines 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ameyume 的回复:]

在调用isPlaying时,需要加上try catch捕获异常。
[/Quote]
谢谢 已经解决了
ameyume 2012-03-20
  • 打赏
  • 举报
回复
在调用isPlaying时,需要加上try catch捕获异常。
Saraphines 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chen515272204 的回复:]

引用 7 楼 yitong1180 的回复:
好的 谢谢了 我试试看 初学android 有的不太懂

我也没搞多久,主要是上次被老大狠狠的喷过——“这也问,那也问,你干什么吃的,都像你这样我搞球,还不如我自己来”。
喷完之后又觉得不对,找我谈话啦,给出上面的建议,嘿嘿。。。让我们初学者遇到问题,自己先试着搞,看资料,google都可以,告诉我说像你现在遇到的错误别人大部分都已经碰……
[/Quote]
搞定了 在监听里加了个
判断 原来我播放start()后 没有销毁 TAT
做了一判断
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
}
demo_ 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yitong1180 的回复:]
好的 谢谢了 我试试看 初学android 有的不太懂
[/Quote]
我也没搞多久,主要是上次被老大狠狠的喷过——“这也问,那也问,你干什么吃的,都像你这样我搞球,还不如我自己来”。
喷完之后又觉得不对,找我谈话啦,给出上面的建议,嘿嘿。。。让我们初学者遇到问题,自己先试着搞,看资料,google都可以,告诉我说像你现在遇到的错误别人大部分都已经碰到过啦,google一下说不定有同样的问题呢。这样提高才快。
楼主一起加油吧,

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧