我正在尝试为一个项目制作一个简单的 mp3 播放器应用程序,但我无法从主要活动中访问该服务。我在活动中有一些 onclicklisteners:
play.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), PlayService.class);
intent.putExtra("key", 0);
startService(intent);
}
});
pause.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), PlayService.class);
intent.putExtra("key", 1);
startService(intent);
}
});
stop.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), PlayService.class);
intent.putExtra("key", 2);
}
});
以及响应 onclicks 的服务中的 switch 语句:
@Override
public int onStartCommand(Intent intent, int flags, int startId){
int key = intent.getIntExtra("key", 1);
MediaPlayer mMediaPlayer = new MediaPlayer();
FileInputStream fileStream = null;
try {
fileStream = new FileInputStream("/sdcard/Download/Bob_Marley-Jammin.mp3");
}
catch (FileNotFoundException e1) {
e1.printStackTrace();
}
switch (key) {
case 0: //Play
if (mMediaPlayer.isPlaying()){
break;
}
else
try {
mMediaPlayer.setDataSource(fileStream.getFD());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
mMediaPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.start();
break;
case 1: //Pause
mMediaPlayer.pause();
break;
case 2: //Stop
if(mMediaPlayer.isPlaying()){
mMediaPlayer.pause();
mMediaPlayer.seekTo(0);
}
break;
default:
break;
}
return Service.START_NOT_STICKY;
}
由于某种原因,播放调用有效,但暂停和停止调用无效。我认为这可能是因为我每次调用服务时都会创建一个新的 MediaPlayer 引用。(我不知道如何解决这个问题)
所以我听说通过将其设置为单例类并从活动中访问它更容易访问该服务,但我不确定如何实现它。基于我的代码的任何提示?