Как распознать состояние включения / выключения экрана при входящем звонке? - PullRequest
4 голосов
/ 27 июля 2011

Мое приложение использует TelephonyManager.ACTION_PHONE_STATE_CHANGED для некоторых действий.Но я хочу другое действие, когда телефон зазвонил, когда пользователь присутствовал (экран был включен), и другое действие, когда пользователь не присутствовал (экран был выключен).Я попробовал метод isScreenOn() только в начале onReceive (потому что, когда экран выключен и поступает входящий вызов, экран ненадолго отключается).Не повезло, однако - иногда это работает, иногда нет.Трансляция асинхронна с состоянием экрана ...

public void onReceive(Context context, Intent intent) {
    pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    Boolean screenOn = pm.isScreenOn();
    Log.w(TAG, "Screen on is " + screenOn.toString());

Как я могу изменить свой код, чтобы действительно определить, не спал ли телефон, когда поступил звонок?

1 Ответ

1 голос
/ 28 июля 2011

Хорошо, я получил ответ, который меня устраивает:

public void onReceive(Context context, Intent intent) {
    KeyguardManager kg = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    Boolean screenBlocked = !kg.inKeyguardRestrictedInputMode();
    Log.w(TAG, "Screen lock is " + screenBlocked.toString());

Такое решение дает информацию, если экран заблокирован. И, в моем случае, этого достаточно - когда экран заблокирован во время входящего вызова - это означает, что пользователя не было.

...