15

通常、Android は、不明瞭または非表示になり始めたときに を呼び出し、その後、まったく表示されなくなったときに呼び出しonPauseます。私のゲームでは、ユーザーが他の場所を見ているときにゲームに負けないように、ゲームを一時停止します。ActivityonStoponPause

ただし、ユーザーが通知バーを下にドラッグすると、 myActivityがカバーされますが、どちらonPauseonStop呼び出されません。これはドキュメントには記載されていないようです。ゲームはバックグラウンドで時を刻み、誰も見ていません。Activityユーザーが負ける前にゲームを一時停止できるように、これが発生したときに自分が隠されていることを伝える他の方法はあり ますか? これについては、Android Developers サイトで何も見つかりません。

4

3 に答える 3

22

onWindowFocusChanged(boolean hasFocus)ofはActivity、必要な目的を果たす必要があります。false通知領域が下にドラッグされたときに呼び出され、領域が上にドラッグされたときに呼び出さtrueれます。対応するAndroid ドキュメントには、このメソッドが「このアクティビティがユーザーに表示されるかどうかを示す最良の指標である」と記載されています。また、 「ステータスバー通知パネル」が表示されたときにコールバックがトリガーされることも明示的に述べています。

このメソッドは他の状況でも呼び出されることに注意してください。良い例は、 の表示ですAlertDialogonWindowFocusChangedアクティビティ自体がAlertDialog. これは、ゲームで AlertDialogs を使用するか、フォーカスの変更を引き起こすその他の何かを使用するかによって、考慮が必要になる場合があります。

この質問で説明されているシナリオと同様のシナリオでは、onWindowFocusChangedAndroid 4.4 を搭載した Nexus 5 や Android 4.1 を搭載した Sony Xperia タブレットなどで、この方法をうまく使用しました。

于 2014-12-05T10:32:22.750 に答える
4

StatusBarManagerは公式の API の一部ではないため、それを検出する方法があるとは思えません。リフレクションを使用しても、どのステータスバークラスにもリスナー用のフックがないようです。

可能であれば、 statusbar を無効にすることができます。そうでなければ、あなたは運が悪いと思います:(

于 2012-10-02T11:41:45.917 に答える