0

特定のアクティビティが表示されていない場合にのみ、特定の状況でアプリで通知を起動したい。

次のコードが示すように、アクティビティを作成および破棄するときに(onCreate / onDestroyを使用して)サービスのバインド/アンバインドを実行し、このアクティビティがonPause / onResumeメソッドで表示される場合は、ブール値で保存することができました。

public void onCreate(Bundle savedInstanceState) {
    // ...
    bindService(...);
}

public void onDestroy() {
    // ...
    unbindService(mConnection);
}

public void onResume() {
    // ...
    // this method sets to true the Service's boolean which retain Activity's visibility.
    mService.registerActivity(true);
}

public void onPause() {
    mService.registerActivity(false);
}

そして、サービスでは、このブール値をチェックして通知を起動します。

特定の場合を除いて、すべての場合に機能します。このアクティビティでアプリを開いたが、ロック画面が有効になっている場合。

私が行ったいくつかのテストでは、ロック画面が表示されたときに、Activity.onPauseメソッドが呼び出されます。ロック画面のロックが解除されたときにActivity.onResumeメソッドが呼び出されることを期待していましたが、それは起こりません。電源ボタンを押してロック画面を呼び出すと、Activity.onResumeメソッドがすでに呼び出されています。この意味で、私がしていることは正しくありません。

ユーザーがロック画面のロックを解除したときにのみActivity.onResumeメソッドが呼び出されるようにするにはどうすればよいですか?または...ロック画面のロックが解除され、ユーザーが実際にアクティビティを見ていることをどのように識別できますか?

4

2 に答える 2

5

Activity.onWindowFocusChanged(boolean hasFocus)Activity画面のロックが解除された後、フォーカスを取り戻すたびにtrueを返す必要があります。

于 2012-05-03T10:35:49.420 に答える
0

2つの考え、テストされていない、そして私はまだ一種のアンドロイド初心者です:

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list2 = am.getRunningAppProcesses();

次に、このリストからアクティビティをフィルタリングし、その重要度プロパティを確認します。フロントランニングアプリは100ですが、ロック画面が前面にあるときにまだ100であるかどうかはわかりません。

または、画面がロックされているかどうかをx秒ごとにチェックし、再びロックが解除されたときに何かを実行する実行中のプロセスを作成することもできます。

于 2012-05-02T19:37:41.863 に答える