来电时如何区分屏幕开/关状态?

时间:2011-07-26 23:40:51

标签: android screen broadcastreceiver telephonymanager

我的应用使用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 个答案:

答案 0 :(得分:1)

好的,我得到了满足我的答案:

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());

如果屏幕被锁定,此解决方案会提供信息。而且,在我的情况下,这就足够了 - 当来电期间屏幕被锁定时 - 这意味着没有用户。