4

我的应用程序将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());

我怎样才能更改我的代码以真正确定电话到达时电话是否正在休眠?

4

1 回答 1

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

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

于 2011-07-27T20:23:11.723 回答