android的service问题
自己学着晚上的视频写了一个mp3播放器,可是遇到一个很郁闷的问题,就是用service控制播放好暂停之后,把mediaplayer的设置放在onStartCommand里面的话,每次都新建一个,这样的话导致暂停不了,专门放在自己写的play(...)方法里面的话却又是不行,我想应该是不是第一个mediaplayer,不能控制MP3了.
相关代码:
public class PlayService extends Service { private MediaPlayer mediaPlayer = null; private static boolean isPlaying = false; // 是否播放 private static boolean isPaused = false; // 是否暂停 private static boolean isStoped = false; // 是否停止 private static boolean isReleased = false; // 是否释放了 public PlayService() { System.out.println("PlayService"); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { System.out.println("onCreate"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("onStartCommand"); File f = (File) intent.getSerializableExtra("file"); int message = intent.getIntExtra("message", 3); // 播放控制信息 mediaPlayer = MediaPlayer.create(this, Uri.parse("file://" + [f.getAbsolutePath()));//---------------------看这里 play_pause_stop(message,f);//---------------------看这里 return super.onStartCommand(intent, flags, startId); } /** * 控制播放和暂停相关操作 * @param message * @param f */ private void play_pause_stop(int message,File f) { switch (message) { case R.id.play: play(mediaPlayer, f); break; case R.id.pause: pause(mediaPlayer); break; case R.id.stop: stop(mediaPlayer); break; default: //默认是播放 play(mediaPlayer, f); break; } } /** * 播放 * * @param mediaPlayer * @param f */ private void play(MediaPlayer mediaPlayer, File f) { if (!isPlaying) { try { /*mediaPlayer = MediaPlayer.create(this, Uri.parse("file://" + f.getAbsolutePath()));*/ //mediaPlayer.reset(); //mediaPlayer.prepare(); mediaPlayer.start();//---------------------看这里 System.out.println("play" + mediaPlayer); isPlaying = true; isReleased = false; isPaused = false; isStoped = false; } catch (Exception e) { e.printStackTrace(); } } } /** * 暂停 * * @param mediaPlayer */ private void pause(MediaPlayer mediaPlayer) { if (!isPaused && !isReleased) { System.out.println("pause" + mediaPlayer); mediaPlayer.pause();//---------------------看这里 isPaused = true; isPlaying = false; isReleased = true; } else if(!mediaPlayer.isPlaying()){ mediaPlayer.start(); isPlaying = true; isReleased = false; isPaused = false; } } /** * 停止 * * @param mediaPlayer */ private void stop(MediaPlayer mediaPlayer) { if (!isStoped) { mediaPlayer.stop(); mediaPlayer.release(); isStoped = true; isPlaying = false; isReleased = true; } }}public class PlaySongActicity extends Activity { private Button play = null; private Button pause = null; private Button stop = null; private boolean isPlaying = false; // 是否播放 private boolean isPaused = false; // 是否暂停 private boolean isStoped = false; // 是否停止 private boolean isReleased = false; // 是否释放了 private MediaPlayer mediaPlayer = new MediaPlayer(); // 媒体播放器类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.play); play = (Button) findViewById(R.id.play); pause = (Button) findViewById(R.id.pause); stop = (Button) findViewById(R.id.stop); ButtonListener listener = new ButtonListener(); // 按键监听 play.setOnClickListener(new ButtonListener()); pause.setOnClickListener(new ButtonListener()); stop.setOnClickListener(new ButtonListener()); } class ButtonListener implements Button.OnClickListener { @Override public void onClick(View v) { File f = (File) getIntent().getSerializableExtra("file"); Intent intent = new Intent(); intent.setClass(PlaySongActicity.this, PlayService.class); intent.putExtra("file", f); intent.putExtra("message", v.getId()); startService(intent); } }}
* 停止
* author:NOHI
* date: 2012-8-1
*/
private void stopMp3(){
if ( null != lastMp3Info && null != mediaPlayer
&& ( Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State)
|| Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)
)
&& mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name())
) {
mediaPlayer.stop();
mediaPlayer.release();
mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_STOP;
}
}
}