解決策は次のとおりです。画面のロックが解除されたときのアクティビティハンドル
BroadcastReceiver
フィルタリングとアクションを登録することによりIntent.ACTION_SCREEN_ON
、次の3つのケースを処理できるようになります。Intent.ACTION_SCREEN_OFF
Intent.ACTION_SCREEN_PRESENT
Intent.ACTION_SCREEN_OFF
:POWER
ボタンを押して画面が真っ暗になったとき。
Intent.ACTION_SCREEN_ON
:POWER
ボタンをもう一度押してロック画面が表示されたとき。
Intent.ACTION_SCREEN_PRESENT
:locksreenを通過して、ゲームに戻ったとき。
ただし、私の場合(Froyo2.2でGalaxyS GT I9000を使用)、HOME
ボタンを処理するときにこれらのアクションは呼び出されません(これは一般的な動作だと思います)。
HOME
とPOWER
ボタンの両方を処理して音楽を一時停止および再開するための簡単で迅速な(ただし、おそらく最善ではない)方法の1つは、onPause
とonResume
メソッドを保持し、次のような単純なブールフラグを使用することです。
private boolean mPowerButton = false;
@Override
public void onPause() {
super.onPause();
// Pause your music
Log.d("Game activity", "Music paused");
}
@Override
public void onResume() {
super.onResume();
if (!this.mPowerButton) {
// Resume your music
Log.d("Game activity", "[HOME button] Music resumed inside onResume");
}
}
public class receiverScreen extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// This is the lockscreen, onResume has been already called at this
// step but the mPowerButton boolean prevented the resumption of music
}
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
LevelActivity.this.mPowerButton = true;
}
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
// Resume your music
Log.d("Game activity", "[POWER button] Music resumed inside ACTION_USER_PRESENT action");
LevelActivity.this.mPowerButton = false;
}
}
}
それが役に立てば幸い!