私のアプリは、MediaPlayer オブジェクトを使用してバックグラウンド ミュージックを再生します。名前付きの他のグローバル変数と一緒に.javaファイルに保存します-他に何がありますか? - GlobalVariables と他の変数にアクセスするには、次の呼び出しを使用します。
GlobalVariables.mPlayer
アプリでアクティビティを切り替えるときに MediaPlayer にオーディオ再生を継続させたいのですが、アプリがフォーカスを失ったときに一時停止します。これを実現するために、keepPlaying というブール値を宣言しました。この値も GlobalVariables に格納され、アプリ内のすべてのアクティビティからアクセスできるようになっています。onStop() が呼び出されるたびにアクティビティにブール値フラグをチェックさせ、keepPlaying = false の場合は再生を一時停止し、そうでない場合は何もしません (再生を続けます)。各 startActivity() 呼び出しの直前にフラグを true に設定し、すべての onResume() 呼び出しで false に設定します。
アクティビティのライフサイクルを正しく理解していれば、アクティビティを切り替えるときに、アプリは最初に現在のアクティビティで OnStop() を呼び出します。最初に keepPlaying を true に設定し、次に onStop() を呼び出します。メソッドには次の 3 行が含まれます。
super.onStop();
if(GlobalVariables.keepPlaying == false)
GlobalVariables.mPlayer.pause();
そのため、startActivity 呼び出しを行うたびに再生を継続する必要がありますが、アプリを最小化すると再生を一時停止します。次に、次のアクティビティの onResume() メソッドで、フラグを false に設定します。
if(GlobalVariables.keepPlaying == true){
GlobalVariables.keepPlaying = false;
}else{
GlobalVariables.mPlayer.start();
しかし、アプリは私が望むように動作していません。アクティビティを切り替えると、オーディオの再生が一時停止します。keepPlaying フラグの getter メソッドと setter メソッドを作成しようとしましたが、それでも修正されていないため、アクセスの問題ではないことはわかっています。
この方法が機能しない理由や修正方法を誰か思いつきますか?
ありがとうございました!
[編集] リクエストに応じて、より完全なコード サンプルを次に示します。現在、自分のコンピューターにアクセスすることはできませんが、これは正確に再作成する必要があります。必要なすべてのインポートを想定します。
public class GlobalVariables{
public boolean keepPlaying;
public MediaPlayer mPlayer;
// Getter and setter methods, found to be unnecessary
public void setKeepPlaying(boolean input){keepPlaying = input;}
public boolean getKeepPlaying(){return keepPlaying;}
}
// First activity. Music plays after starting Activity, as expected.
public class FirstActivity extends Activity{
@Override
public void onCreate(...){
super.onCreate(...);
GlobalVariables.keepPlaying = false;
GlobalVariables.mPlayer.create(this, R.raw.music);
}
@Override
public void onStop(){
super.onStop();
// Check to see if we want to stop audio playback
if(GlobalVariables.keepPlaying == false){
GlobalVariables.mPlayer.pause();
}
@Override
public void onResume(){
super.onResume();
// If audio is already playing, set keepPlaying to false. Otherwise, start audio playback.
if(GlobalVariables.keepPlaying == true) //Thus audio is playing
GlobalVariables.keepPlaying = false;
else
GlobalVariables.mPlayer.start();
}
public void launchNextActivity(){
GlobalVariables.keepPlaying = true;
startActivity(new Intent(FirstActivity.this, SecondActivity.class));
}
}
Code for SecondActivity is the same as FirstActivity. When starting SecondActivity, the music abruptly stops. When hiding the app and resuming it, the music begins playing again.