确定锁定屏幕已解锁

时间:2012-05-02 18:30:10

标签: android android-activity android-notifications

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

当我创建并销毁Activity(使用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方法?或者......如何确定锁定屏幕已解锁且用户真正查看活动?

2 个答案:

答案 0 :(得分:5)

每次Activity.onWindowFocusChanged(boolean hasFocus)在屏幕解锁后重新获得焦点时,

Activity都会返回true。

答案 1 :(得分:0)

2个想法,没有经过考验,我仍然是一个机器人noob:

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

然后,从此列表中过滤您的活动,并检查它的重要性属性。正面运行的应用程序是100,当锁屏在它前面时,不知道它是否仍然是100。

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