プロジェクト用のシンプルな 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 参照を作成しているためだと思います。(これを修正する方法がわかりません)
そのため、シングルトン クラスにしてアクティビティからアクセスすることでサービスにアクセスしやすくなると聞きましたが、それを実装する方法がわかりません。私のコードに基づいたヒントはありますか?