我设计了4个RaidoButton 然后对4个 进行监听 然后一选择后播放 地区方言 以前没用过 MediaPlayerMediaPlayer 是否可以这么写虽然可以做到 播放下一个音效 然后停止上一个音效 但是 问题来了 如果播放完整的音效 再选择的时候 却报错了.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;
}
});

解决方案 »

  1.   

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

  2.   

    这个是报错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)
      

  3.   

    这个是状态出错了,start()方法最好放在MediaPlayer.OnPreparedListener接口中调用保险一些。楼主最好还是自己看看MediaPlayer API,理清MediaPlayer这个类的几个状态,类中的一些监听接口。
      

  4.   

    好的 谢谢了 我试试看 初学android 有的不太懂
      

  5.   

     我也没搞多久,主要是上次被老大狠狠的喷过——“这也问,那也问,你干什么吃的,都像你这样我搞球,还不如我自己来”。 
     喷完之后又觉得不对,找我谈话啦,给出上面的建议,嘿嘿让我们初学者遇到问题,自己先试着搞,看资料,google都可以,告诉我说像你现在遇到的错误别人大部分都已经碰到过啦,google一下说不定有同样的问题呢。这样提高才快。
    楼主一起加油吧,
      

  6.   

    搞定了 在监听里加了个 
    判断 原来我播放start()后 没有销毁 TAT
    做了一判断
    if (mediaPlayer.isPlaying()) {
                        mediaPlayer.stop();
                        mediaPlayer.reset();
                        mediaPlayer.release();
                    }
      

  7.   

    在调用isPlaying时,需要加上try catch捕获异常。