11

この質問が何度も出されていることは承知していますが、満足のいく回答が得られたことはありません。

私の問題は次のとおりです。

事前定義された時間、画面がオフにならないようにするアクティビティがあります。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

定義済みの時間が経過すると、「キャンセル」を押さないとディスプレイが 10 秒後にオフになることをユーザーに通知するカウントダウン付きのダイアログが表示されます。

なんとかディスプレイをオフにできましたが、電話は常にスタンバイモードに切り替わります。

オフにするために使用したもの:

Window mywindow = getWindow();

WindowManager.LayoutParams lp = mywindow.getAttributes();

lp.screenBrightness = 0.0f;

mywindow.setAttributes(lp);

スタンバイモード(アクティビティを一時停止する)に移行せずに、ディスプレイを完全に暗くする可能性はありますか。

私の目標は、ユーザーがディスプレイをタップするだけで画面を再び明るくできるようにすることです。したがって、アクティビティはアクティブな状態を維持する必要があります。

同様の質問がここで尋ねられました。

この質問はほぼ1年前のものなので、その間に誰かがこれに成功したことを願っています.

たくさんのご挨拶

シギー

4

2 に答える 2

8

ディスプレイに触れるだけで、画面をオフにして再アクティブ化することはできないようです。

私の新しいアプローチ:

private WakeLock screenWakeLock;

PowerManager pm = PowerManager.getSystemService(Context.POWER_SERVICE);
screenWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                                "screenWakeLock");
screenWakeLock.acquire();

PARTIAL_WAKE_LOCK は、CPU の実行を維持しますが、ディスプレイをシャットダウンできます。

電源ボタンまたはホームボタンを押すと、ディスプレイが再びオンになり、アクティビティが再び表示されます (「スライドしてロックを解除」または他の操作を行う必要はありません)。

をリリースすることを忘れないでくださいscreenWakeLock

私の場合onResume()、アクティビティの中でそれを行いました:

if (screenWakeLock != null) {
   if(screenWakeLock.isHeld())
      screenWakeLock.release();
   screenWakeLock = null;
}

たぶん、これは将来同様の問題を抱えている人に役立つでしょう。

于 2013-01-11T14:32:01.680 に答える
2

注:WAKELOCKで作業できませんでした

SCREEN_OFF_TIMEOUT の変更を伴う回避策を見つけました。以下のコードを使用してそれを達成します。

Settings.System.putInt(getContentResolver(), 
                           Settings.System.SCREEN_OFF_TIMEOUT, 10);

これにより、 screen_timeout SYSTEM-WIDE のタイムアウトとして 10 ミリ秒が設定されます。

今、これによってもたらされたシステム全体の変化に悩まされているかもしれません。これを回避するには、デフォルトの screen_timeout_time を取得して変数に保存し、アクティビティの finish() でシステムの SCREEN_OFF_TIMEOUT を設定し直します。

screen_timeout として 10ms を設定する前に、SCREEN_OFF_TIMEOUT を取得します。

int defaultScreenTimeout= android.provider.Settings.
      System.getInt(getContentResolver(),Settings.System.SCREEN_OFF_TIMEOUT,-1);

変更が完了したとき、またはアクティビティが終了したときに、 SCREEN_OFF_TIMEOUT を元に戻すことができます。

@Override
public void finish(){
    Settings.System.putInt(getContentResolver(), 
                      Settings.System.SCREEN_OFF_TIMEOUT, defaultScreenTimeout);
super.finish();
}
于 2014-05-23T10:58:05.297 に答える