最近写了个用MediaPlayer播放MP3的播放器,播放时启动了Service,我想在模拟器上按返回键时在onDestroy()中停止服务,将音乐播放器给停止了,停止倒是能停止,只是我再次在应用中打开时就会报上面的错误,点击OK后再启动播放器时又可以正常播放了,哪位帮我分析下是怎么回事啊!
下面是报的错:
06-03 11:13:53.272: E/AndroidRuntime(914): FATAL EXCEPTION: main
06-03 11:13:53.272: E/AndroidRuntime(914): java.lang.RuntimeException: Unable to create service com.wind.musicplayer.serviec.MusicPlayerService: java.lang.IllegalStateException
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2263)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.os.Handler.dispatchMessage(Handler.java:99)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.os.Looper.loop(Looper.java:137)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-03 11:13:53.272: E/AndroidRuntime(914): at java.lang.reflect.Method.invokeNative(Native Method)
06-03 11:13:53.272: E/AndroidRuntime(914): at java.lang.reflect.Method.invoke(Method.java:511)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-03 11:13:53.272: E/AndroidRuntime(914): at dalvik.system.NativeStart.main(Native Method)
06-03 11:13:53.272: E/AndroidRuntime(914): Caused by: java.lang.IllegalStateException
06-03 11:13:53.272: E/AndroidRuntime(914): at android.media.MediaPlayer._reset(Native Method)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.media.MediaPlayer.reset(MediaPlayer.java:1190)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.wind.musicplayer.handle.MyMediaPlayer.initMusicPlayer(MyMediaPlayer.java:78)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.wind.musicplayer.handle.MyMediaPlayer.<init>(MyMediaPlayer.java:46)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.wind.musicplayer.serviec.MusicPlayerService.onCreate(MusicPlayerService.java:40)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2253)
06-03 11:13:53.272: E/AndroidRuntime(914): ... 10 more
下面是报的错:
06-03 11:13:53.272: E/AndroidRuntime(914): FATAL EXCEPTION: main
06-03 11:13:53.272: E/AndroidRuntime(914): java.lang.RuntimeException: Unable to create service com.wind.musicplayer.serviec.MusicPlayerService: java.lang.IllegalStateException
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2263)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.os.Handler.dispatchMessage(Handler.java:99)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.os.Looper.loop(Looper.java:137)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-03 11:13:53.272: E/AndroidRuntime(914): at java.lang.reflect.Method.invokeNative(Native Method)
06-03 11:13:53.272: E/AndroidRuntime(914): at java.lang.reflect.Method.invoke(Method.java:511)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-03 11:13:53.272: E/AndroidRuntime(914): at dalvik.system.NativeStart.main(Native Method)
06-03 11:13:53.272: E/AndroidRuntime(914): Caused by: java.lang.IllegalStateException
06-03 11:13:53.272: E/AndroidRuntime(914): at android.media.MediaPlayer._reset(Native Method)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.media.MediaPlayer.reset(MediaPlayer.java:1190)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.wind.musicplayer.handle.MyMediaPlayer.initMusicPlayer(MyMediaPlayer.java:78)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.wind.musicplayer.handle.MyMediaPlayer.<init>(MyMediaPlayer.java:46)
06-03 11:13:53.272: E/AndroidRuntime(914): at com.wind.musicplayer.serviec.MusicPlayerService.onCreate(MusicPlayerService.java:40)
06-03 11:13:53.272: E/AndroidRuntime(914): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2253)
06-03 11:13:53.272: E/AndroidRuntime(914): ... 10 more
解决方案 »
- android 退出应用后,还需要缓存从数据库查询出来的数据吗
- ksoap2_WebService问题
- 【道听途说】Android如何直接显示FFMpeg解码后的yuv数据?
- 提交过数据到WebService的前辈进来看下
- Android出现Waiting for sdk to finish loading
- 关于socket通信服务端的问题
- android4.0 外接USB摄像头 有没有成功的先例
- android 系统的defaults.xml在哪
- 求助大神们,如何实现发送图片到聊天框?
- android:listView的滚动条怎么设置的?
- 能不能再模拟器的设置里面存储管理里打开模拟器的SD卡?
- android一个xml的FrameLayout中有两个相对布局如何在程序中设置一个显示一个隐藏,而且通过事件可以使其显示状态互换
import java.util.List;import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;import com.wind.musicplayer.po.MusicInfo;/**
* @category: 操作类 Description: 对播放器的操作
* @author Wind Create Date: 2012-05-26
*/
public class MyMediaPlayer { public static final int MUSIC_PLAY = 1;
public static final int MUSIC_NEXT = 2;
public static final int MUSIC_PREVIOUS = 3;
public static final int MUSIC_ITEM = 4;
public static final int MUSIC_SEEKBAR = 5;
public static final String MUSIC_ITEM_ID = "play_id";
public static String MUSIC_KEY = "music";
public static String KEY_MUSIC_STATE = "MusicState";
public static String KEY_MUSIC_NAME = "MusicName"; public static MediaPlayer musicPlayer;
private List<MusicInfo> list;
private int play_id;
private Context context;
private Intent intent;
private Bundle bundle;
private int seek_progress; public MyMediaPlayer(Context context, int play_id, List<MusicInfo> list) {
this.list = list;
this.context = context;
this.play_id = play_id;
this.bundle = new Bundle();
musicPlayer = initMusicPlayer();
}
public void setSeek_progress(int seek_progress) {
this.seek_progress = seek_progress;
} public void setPlay_id(int play_id) {
this.play_id = play_id;
}
public void setIntent(Intent intent) {
this.intent = intent;
} /**
* Description: 初始化MediaPlayer
*
* @author Wind
* @param mid
*/
public MediaPlayer initMusicPlayer() { // 获得歌曲路径
String musicPath = list.get(play_id).getMusicPath(); // 解析歌曲路径,获得播放器初始化的Uri
Uri musicUri = Uri.parse(musicPath);
// 当切换歌曲时,对媒体播放器进行重置
if (musicPlayer != null) {
musicPlayer.reset();
try {
musicPlayer.setDataSource(musicPath);
musicPlayer.prepare(); } catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } else { // 初始化媒体播放器
musicPlayer = MediaPlayer.create(context, musicUri);
} musicPlayer.setOnCompletionListener(new OnCompletionListener() { @Override
public void onCompletion(MediaPlayer mp) {
musicPlayer.stop();
playNext();
}
}); return musicPlayer;
} // 根据获得的按键值判断要执行的操作
public void playerHandle(int playerHandle) { switch (playerHandle) {
case MUSIC_PLAY:
playSong();
break;
case MUSIC_NEXT:
playNext();
break;
case MUSIC_PREVIOUS:
playPrevious();
break;
case MUSIC_ITEM:
playIetm();
break;
case MUSIC_SEEKBAR:
musicPlayer.seekTo(seek_progress);
break;
}
} // 点击ListViewItem
public void playIetm() {
initMusicPlayer();
playSong();
} // 上一首
public void playPrevious() {
if (play_id == 0) {
play_id = list.size() - 1;
musicPlayer = initMusicPlayer();
} else {
--play_id;
musicPlayer = initMusicPlayer();
} playSong(); } // 播放歌曲
public void playSong() { // 判断MediaPlayer是否被初始化
if (musicPlayer != null) { // 如果歌曲正在播放执行下列操作
if (musicPlayer.isPlaying()) {
sendPlayerState("noplaying");
// 将歌曲置为停止状态
musicPlayer.pause();
// 如果没有歌曲播放,执行如下操作
} else { sendPlayerState("playing");
// 播放歌曲
musicPlayer.start();
} } } // 发送播放状态
public void sendPlayerState(String state) {
bundle.putString(KEY_MUSIC_STATE, state);
bundle.putString(KEY_MUSIC_NAME, getSongName());
intent.putExtras(bundle);
context.sendBroadcast(intent);
} // 下一首
public void playNext() {
if (play_id == list.size() - 1) {
play_id = 0;
musicPlayer = initMusicPlayer();
} else {
++play_id;
musicPlayer = initMusicPlayer();
} playSong(); } // 获得歌曲的名字
public String getSongName() {
return list.get(play_id).getMusicName().replace(".mp3", "");
} // 释放资源
public void playerRelease() {
musicPlayer.release();
}}