2

Android OS で画面の明るさを変更するには、少なくとも 3 つの異なる手法があるようです。そのうちの 2 つはカップケーキの後で機能しなくなり、3 番目に認められた手法には明らかにバグがあります。

ワンビュー アクティビティの開始時に画面の明るさを上げ、アクティビティの終了時に明るさをユーザー設定に戻したいと思います。ボタンも、2 番目のビューも 2 番目のアクティビティもありません。開始時に明るさを最大にし、アクティビティの最後に元の明るさの設定に戻すだけです。

私が見つけた WindowManager.LayoutParams を使用した現在の手法の例は、2 行のコードの範囲です。

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 100 / 100.0f;
getWindow().setAttributes(lp);

ソースコードの数ページと多数のアクティビティに。

誰かがリンクを提供できる、開始時に画面の明るさを最大にする簡単な例はありますか?

4

1 に答える 1

4

簡単にできることは、ドラッグドロップを使用してxmlでSeekBarを作成するか、そのxmlを書き込むことです

 SeekBar
     android:id="@+id/brightnesSseeker"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_weight="1"
     android:max="255"
     android:progress="255" />

mainActivity クラスでこれを行います。

brightnesSseeker = (SeekBar) findViewById(R.id.brightnesSseeker);

    brightnesSseeker
            .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
                public void onStopTrackingTouch(SeekBar seekBar) {
                    // Nothing handled here
                }

                public void onStartTrackingTouch(SeekBar seekBar) {
                    // Nothing handled here
                }

                public void onProgressChanged(SeekBar seekBar,
                        int progress, boolean fromUser) {
                    // Set the minimal brightness level
                    // if seek bar is 20 or any value below
                    if (progress <= 20) {
                        // Set the brightness to 20
                        screenBrightness(20);
                    } else {
                        // Set brightness variable based on the progress bar
                        screenBrightness(progress);
                    }
                    stobeVariable=progress*10;
                }
            });

次に、単純な関数を記述します。

private void screenBrightness(double newBrightnessValue) {
    /*
     * WindowManager.LayoutParams settings = getWindow().getAttributes();
     * settings.screenBrightness = newBrightnessValue;
     * getWindow().setAttributes(settings);
     */
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    float newBrightness = (float) newBrightnessValue;
    lp.screenBrightness = newBrightness / (float) 255;
    getWindow().setAttributes(lp);
}

また、screenBrightness 関数を呼び出す前に明るさモードを確認してください。これは、モードが自動明るさに選択されている場合があり、その場合は明るさが変わらないためです。マニフェスト ファイルでも権限が必要です。

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

setOnSeekBarChangeListener の前に onCreate で次の関数を呼び出します。

  void changeBrightnessMode(){

    try {
        int brightnessMode = Settings.System.getInt(getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE);
        if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
            Settings.System.putInt(getContentResolver(),
                    Settings.System.SCREEN_BRIGHTNESS_MODE,
                    Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
        }


    } catch (Exception e) {
        // do something useful

    }
}
于 2014-02-17T12:55:26.923 に答える