2012-05-02 200 views
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方法仅在用户解锁锁定屏幕时被调用?或者...我如何识别锁定屏幕已解锁并且用户真的在查看活动?

+1

将'Activity.onWindowFocusChanged(布尔hasFocus)'返回你所需要的价值? – techiServices

+0

@ techiServices谢谢!这工作完美无瑕。但我不能接受这个“答案”。请回答这个问题,我可以接受它。好? – borges

+0

已回答。非常感谢。 – techiServices

回答

5

Activity.onWindowFocusChanged(boolean hasFocus)应每隔后,屏幕解锁你的Activity获得焦点时返回true。

0

2想法,未经测试,我至今仍是Android小白:

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

然后,从这个列表过滤你的活动,并检查它的意义的财产。前运行的应用程序是100,不知道它是否仍然是100时,锁屏是在它的前面。

或者,你可以创建一个正在运行的进程哪些检查过X秒,如果屏幕被锁定,并做一些事情,当它再次解锁。