2012-05-02 4 views
0

Я хочу запустить уведомление в своем приложении в конкретной ситуации только в том случае, если определенное действие не отображается.Определите, что экран блокировки был разблокирован

Мне удалось сделать это, связывая/отвязав службу, когда я создаю и уничтожаю действие (используя onCreate/onDestroy) e, сохраняя логическое значение, если это действие видно через методы 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 (boolean hasFocus)' вернуть требуемое значение? – techiServices

+0

@techiУслуги спасибо! Это работало безупречно. Но я не могу принять этот «ответ». Пожалуйста, ответьте на вопрос, чтобы я мог его принять. ОК? – borges

+0

Ответил. Большое спасибо. – techiServices

ответ

5

Activity.onWindowFocusChanged(boolean hasFocus) должен возвращать true каждый раз, когда ваш Activity восстанавливает фокус после разблокировки экрана.

0

2 мысли, непроверенная и я до сих пор вид андроид нуб:

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

Затем отфильтровать активность из этого списка и проверить важность свойство этого. Передние запущенные приложения - это 100, не знаю, все ли 100, когда перед ним стоит экран блокировки.

Или вы можете создать текущий процесс, который проверяет когда-либо x секунд, если экран был заблокирован, и что-то делает, когда он снова разблокирован.