2012-05-02 197 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秒,如果屏幕被鎖定,並做一些事情,當它再次解鎖。