我的应用使用 TelephonyManager.ACTION_PHONE_STATE_CHANGED
执行某些操作。但是我想要在用户在场(屏幕打开)时电话响起时采取不同的操作,而在用户不在场(屏幕关闭)时采取不同的操作。我在 onReceive
的开头尝试了 isScreenOn()
方法(因为当屏幕关闭并且有来电时,屏幕会停留一小会儿)。然而,运气不佳 - 有时有效,有时无效。广播与屏幕状态异步...
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());
我如何更改我的代码才能真正确定来电时手机是否处于休眠状态?
好的,我得到了令我满意的答案:
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());
如果屏幕被锁定,此类解决方案会提供信息。而且,就我而言,这就足够了 - 当屏幕在来电期间被锁定时 - 这意味着没有用户。
我是一名优秀的程序员,十分优秀!