アクティビティ A で音楽の再生を開始します。アクティビティ B が開くと、アクティビティ A が閉じ、アクティビティ A の音楽の再生が停止します。アクティビティ A に戻ったときに、中断したところから音楽が再生されるようにしたいと考えています。どうすればいいですか?
3 に答える
onPause()
メディアがあった位置またはonStop()
アクティビティ Aの位置を (永続的に)onResume()
保存し、保存された値をチェックして、メディア プレーヤーを呼び出す必要がありseekTo()
ます。このようなもの:
SharedPreferences オブジェクトを取得するには:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor prefsEdit = prefs.edit();
位置を保存して呼び出します。
public void onPause(){
super.onStop();
//It might make more sense to do this right before you call startActivity()
//to launch activityB then here.
int position = mp.getCurrentPosition();
prefsEdit.putInt("mediaPosition", position);
prefsEdit.commit();
}
public void onResume(){
super.onResume();
int position = prefs.getInt("mediaPosition", 0);
mp.seekTo(position);
}
この方法を使用する場合、B に行かずに ActivityA を終了するときに位置を 0 に設定する必要があることに注意してください。そうしないと、戻ってきたときに音楽が最初から開始されません。
アクティビティ A で、onPause() メソッドをオーバーライドして MediaPlayer を一時停止し、onResume() メソッドをオーバーライドして MediaPlayer を再開します。また、アクティビティ B に移動するときに mediacontroller オブジェクトが破棄されないようにします。
注意深く観察すると、実際にリアルタイムのメディア プレーヤーがサービスで処理されますが、アクティビティでは処理されないことがわかります。したがって、サービスでメディア プレーヤーを作成し、メディア プレーヤー クラスのライフ サイクル メソッドとサービスでのアクティビティをより適切に使用することをお勧めします。