14

システムの自動輝度モードとレベルを設定するために、以下を使用しています。

    android.provider.Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
    android.provider.Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, y.brightness1);

自動ブリゲスのオンとオフを変更したり、さまざまなレベルを設定したりできます。設定が正しく適用されているようです-[設定]->[表示]->[明るさ]に移動すると、設定した設定が実際に正しく表示されます。ただし、実際の画面の明るさは変わりません。表示設定のスライダーをタップするだけで、すべてが適用されます。

メインアクティビティでアプリを実行していて、これらの設定がBroadcastReceiverに適用されていることをお伝えしておきます。ダミーのアクティビティを作成してそこでテストしましたが、同じ結果が得られました。

4

4 に答える 4

17

OK、ここで答えを見つけました: ウィジェットから表示を更新しますか?

基本的に、明るさの変化を処理する透過的なアクティビティを作成する必要があります。投稿で言及されていないことは、あなたがしなければならないということです:

Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, brightnessLevel); 

その後、

WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = brightness; 
    getWindow().setAttributes(lp);

また、変更を適用した直後にfinish()を呼び出すと、明るさの設定を適用する前にレイアウトを作成する必要があるため、明るさが実際に変更されることはありません。そのため、300ミリ秒の遅延があり、finish()と呼ばれるスレッドを作成することになりました。

于 2011-02-20T05:49:44.483 に答える
2

私は自分のアプリの1つで画面の明るさと同じようなことをしていますが、WindowManagerを介してそれを行っています。次のコードを使用して、現在の画面の明るさを取得し(後で使用できるように保存し)、フルに設定します。

    WindowManager.LayoutParams lp = getWindow().getAttributes();
    previousScreenBrightness = lp.screenBrightness;
    float brightness = 1;
    lp.screenBrightness = brightness; 
    getWindow().setAttributes(lp); 
于 2011-02-17T17:54:59.723 に答える
2

上記の「 user496854 」で与えられた答えを使用してください。
最大screenBrightness=255を使用している場合は、

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
lp.screenBrightness = brightness; getWindow().setAttributes(lp);

screenBrightnessを255で割る

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = brightness/(float)255;   
getWindow().setAttributes(lp);
于 2013-06-21T07:39:43.713 に答える
1

すべてのActivity.onResume()メソッドから呼び出す静的メソッドをApplicationクラスに作成しました。

MyApplication extends Application {
    ...
    public static void setBrightness(final Activity context) {
        // get the content resolver
        final ContentResolver cResolver = context.getContentResolver();
        // get the current window
        final Window window = context.getWindow();

        try {
            // get the current system brightness
            int brightnessLevel = System.getInt(cResolver,System.SCREEN_BRIGHTNESS);
            // get the current window attributes
            LayoutParams layoutpars = window.getAttributes();
            // set the brightness of this window
            layoutpars.screenBrightness = brightnessLevel / (float) 255;
            // apply attribute changes to this window
            window.setAttributes(layoutpars);
        } catch (SettingNotFoundException e) {
            // throw an error cuz System.SCREEN_BRIGHTNESS couldn't be retrieved
            Log.e("Error", "Cannot access system brightness");
            e.printStackTrace();
        }
    }
}

MyActivity extends Activity {
    ...
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume()");
        MyApplication.setBrightness(this);
    }
}
于 2011-10-15T07:58:44.670 に答える