29

私は、ディスプレイをオフにして、ユーザーがタッチスクリーンに触れてから目を覚ます方法を見つけようとしています。
デバイスは、デバイスがタブレットであり、ユーザーがタッチスクリーン以外にはアクセスできない(ボタンがまったくない)組み込み環境にあります。

電源に接続されているのでバッテリーは問題ありませんが、アクティビティが検出されない場合は画面をオフにして、一日中顔を見つめないようにし、LCDバックライトの寿命を縮めないようにします。

私はウェイクロックを恒久的に維持し、いつ眠るかを自分で決めます。

問題は、次を使用して画面をオフにすると、次のようになります。

WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 0;
getWindow().setAttributes(params);

アクティビティは一時停止および停止されます。そして、ユニットはそれを起こすためのタッチに反応しません。電源ボタンを押す必要があります。その時点で、「スライドしてロックを解除する」が表示されます。

タッチスクリーンイベントを検出してディスプレイをオンに戻すことができるように、ディスプレイをオフにしてから実行を続けたいと思います。

また、ディスプレイを0.1の明るさに変えてみましたが、これは一部のデバイスで機能しますが、機能する必要のあるデバイスでは、ディスプレイが「暗くなる」だけです。

私もこれを試しました:

// First Remove my FULL wakelock

//then aquire a partial wake lock (which should turn off the display)
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");

wl.acquire();

ただし、この方法では表示がオフになりません。

4

4 に答える 4

7

最後にそれを理解しました。それが役に立てば幸い。:)

  • WindowManager のインスタンスを取得します。

    WindowManager windowManager = (WindowManager) Class.forName("android.view.WindowManagerImpl").getMethod("getDefault", new Class[0]).invoke(null, new Object[0]);

  • 全画面レイアウト xml を作成します (レイアウト パラメータを に設定fill_parent)

  • タッチがアプリに渡され、アプリがそれを検出できるように、ビューをクリックできない、フォーカスできない、長くクリックできないなどのように設定します。

    view.setFocusable(false);
    view.setClickable(false);
    view.setKeepScreenOn(false);
    view.setLongClickable(false);
    view.setFocusableInTouchMode(false);

  • type のレイアウト パラメータを作成しますandroid.view.WindowManager.LayoutParamsLayoutParams layoutParams = new LayoutParams();

  • 高さ、幅などのレイアウト パラメータを設定する

    layoutParams.height = LayoutParams.FILL_PARENT; 
    layoutParams.width = LayoutParams.FILL_PARENT;
    layoutParams.flags = 280; // You can try LayoutParams.FLAG_FULLSCREEN too
    layoutParams.format = PixelFormat.TRANSLUCENT; // You can try different formats
    layoutParams.windowAnimations = android.R.style.Animation_Toast; // You can use only animations that the system to can access
    layoutParams.type = LayoutParams.TYPE_SYSTEM_OVERLAY;
    layoutParams.gravity = Gravity.BOTTOM;
    layoutParams.x = 0;
    layoutParams.y = 0;
    layoutParams.verticalWeight = 1.0F;
    layoutParams.horizontalWeight = 1.0F;
    layoutParams.verticalMargin = 0.0F;
    layoutParams.horizontalMargin = 0.0F;
    
  • 重要なステップ: 必要な明るさのパーセンテージを設定できます。 view.setBackgroundDrawable(getBackgroundDrawable(i));

    private Drawable getBackgroundDrawable(int i) {
    int j = 255 - (int) Math.round(255D * Math.exp(4D * ((double) i / 100D) - 4D));
    return new ColorDrawable(Color.argb(j, 0, 0, 0));}
    
  • 最後に、先ほど作成した windowManager にビューを追加します。

    windowManager.addView(view, layoutParams);

SYSTEM_ALERT_WINDOW注:画面にオーバーレイを配置するには、アクセス許可が必要です。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

これをテストしましたが、動作します。行き詰まったらお知らせください。

于 2013-04-16T10:01:18.107 に答える
1

サービスが wake lock を使用している場合でも、Activity 側から実行している場合は、フラグを使用してフラグを取得することをお勧めします。

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // For keeping screen on
        // You can blur screen or dim screen using following flags
        // FLAG_BLUR_BEHIND -   Blur screen
        // FLAG_DIM_BEHIND - Dim Behind

これらのフラグをクリアしたり、他のフラグを課して画面を暗くしたりぼかしたりすることができます。getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

これで問題が解決することを願っています。必要に応じて、 http://developer.android.com/reference/android/view/Window.htmlから他のフラグを 調べます

もう1つFyiがあります..Androidで隠しAPIを呼び出して画面をオフにします

于 2012-03-02T18:38:16.827 に答える
0

それが役立つかどうかはわかりませんが、単にウェイクロックを使用して、画面を維持し、黒い画像を表示するイメージビューを表示することができます

于 2012-06-09T11:00:32.923 に答える
0

部分的なウェイクロックを取得し、次を使用して画面をオフにすることができます。

PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");
wl.acquire();
WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 0;
getWindow().setAttributes(params);
于 2013-02-20T11:28:01.133 に答える