1

画面の明るさを変えるスライダーを作ろうとしています。上記のコードでなんとかできました

明るさコード:

BackLightControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            float BackLightValue = (float)progress/100.0f;
            int brightnessMode;
            try {
                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);
            }
              BackLightSetting.setText(String.valueOf(BackLightValue));
              WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
              layoutParams.screenBrightness = BackLightValue;
              getWindow().setAttributes(layoutParams);
            } catch (SettingNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   
        }           

        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }
    });


}

}

問題は、それが機能していて、スライダーをスライドさせている間に明るさが変化するのを見ることができますが、アクティビティが終了するとすぐに以前の明るさのレベルに戻ることです。これは無意味です. ただし、スライダーを使用すると無効になった自動バックライト設定は残ります。私が間違っていることは何ですか?また、画面がオフになるため、スライダーが0にならないようにするにはどうすればよいですか。強制的にアプリを閉じるだけで、変更をリセットできます。

4

3 に答える 3

3

スライダーが 0にならないようにするには、結果が 0 の場合にステートメントに 1 を追加します。

float BackLightValue = (float)progress/100.0f;
if(BackLightValue == 0){
   BackLightValue++
}

明るさを保存するには、次のコードを使用して、アクティビティの終了ステートメントを数百ミリ秒遅らせるようにしてください。何らかの理由で、これは通常、問題を解決します。

System.putInt(getContentResolver(), System.SCREEN_BRIGHTNESS, brightness);

明るさを変更したい場所にこの行を追加するだけです。3 番目のパラメーター「明るさ」は、シークバーの値に置き換える必要があります。あなたの場合、BackLightValue。明るさの値の範囲は 1 ~ 255 であることに注意してください。


このハックで画面を更新する必要があるかもしれません:

  • アクティビティを開始してすぐに終了する

明るさを設定したら、このアクティビティを開始します。

context.startActivity(new Intent(context, Bright.class));

ダミー アクティビティは次のようになります。

public class Bright extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

finish();
  }
}
于 2012-09-30T15:26:49.603 に答える
1

スライダーの値が 0 にならないようにするには、次のようなバージョンを使用できます :

//We want a minimum om 20 percent screen brightness
private static int MY_MIN_VALUE = 20;

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    if (progress > MY_MIN_VALUE){
        seekBar.setProgress(progress);
        saveScreenBrightness(progreess);
    }

    else
        seekBar.setProgress(MY_MIN_VALUE);     
}

メソッドsaveScreenBrightness()は、明るさを更新するメソッドです。

明るさをシステムに保存するには、次のコードを使用してみてください。

System.putInt(getContentResolver(), System.SCREEN_BRIGHTNESS, brightness);

この方法はテストしていませんが、動作するはずです。この投稿を読んでみてください:プログラムで画面の明るさを変更する (電源ウィジェットと同様)

于 2012-09-30T15:22:05.673 に答える
0

明るさの値が 0 にならないようにするには (明るさ 1 ~ 255 が必要): seekBar.setMax(254); //0-254

//その後、代わりに進行状況 (0-254) を使用し、常に ++進行状況 (1-255) を使用します

//そして、seekBar の進行状況を設定するときに --brightness を使用します

于 2016-03-15T00:13:50.570 に答える