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 に答える