0

仅当某个活动不可见时,我才想在特定情况下在我的应用程序中启动通知。

当我创建和销毁 Activity(使用 onCreate/onDestroy)时,我设法做到了服务的绑定/取消绑定,如果此 Activity 通过 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个想法,未经测试,我仍然是一个android noob:

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

然后,从此列表中过滤您的活动并检查它的重要性属性。前端运行的应用是100,不知道前面有锁屏是不是还是100。

或者,您可以创建一个正在运行的进程,该进程每隔 x 秒检查一次屏幕是否被锁定,并在再次解锁时执行某些操作。

于 2012-05-02T19:37:41.863 回答