gpt4 book ai didi

android - 使用自动模式时以编程方式更改亮度在 Android 中没有任何效果

转载 作者:行者123 更新时间:2023-12-02 14:08:08 26 4
gpt4 key购买 nike

我已经编写了代码来创建 DialogPreference,其工作方式应该类似于默认的 Android 亮度设置对话框。

只要将亮度模式设置为Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL,它就可以完美工作。 。但是当我将模式更改为Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC时手机亮度不取Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)的值考虑在内。

让我给你举个例子:

  1. 我将 Android 设置中的亮度设置为 255,并将模式设置为自动。这些更改会由手机(以及我的应用程序)反射(reflect)出来。
  2. 我将 Android 设置中的亮度设置为 100,并将模式设置为手动。这些更改会由手机(以及我的应用程序)反射(reflect)出来。
  3. 我在应用程序中将亮度设置为 50,模式仍然是手动。这些更改会由手机(以及我的应用程序)反射(reflect)出来。
  4. 我将应用程序中的亮度设置为 50,并将模式设置为自动。尽管我以编程方式将当前屏幕亮度更改为 50,但我的应用程序的其余部分和手机本身(例如手机设置和主页)的亮度为 255,模式为自动(我可以在 Android 设置中检查)。同时Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)仍然返回 50。

这是我的代码。我说过,它位于一个扩展 DialogPreference 的类中,因此是 onCreateDialogView 方法。

private static int MAX_BRIGHTNESS_VALUE = 255;

@Override
protected View onCreateDialogView() {
View dialogView = super.onCreateDialogView();
mAutomatic = (CheckBox) dialogView.findViewById(R.id.automatic_brightness);
mBrightnessBar = (SeekBar) dialogView.findViewById(R.id.brightness_bar);

mBrightnessBar.setMax(MAX_BRIGHTNESS_VALUE);
mAutomatic.setChecked(getBrightnessMode() == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
mBrightnessBar.setProgress(getBrightness());

mAutomatic.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
setAutomaticBrightness();
} else {
setManualBrightness();
}
}

});
mBrightnessBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress > 10) {
setBrightness(progress);
}
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}

});
return dialogView;
}

private void setBrightness(int value) {
Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, value);

// here I set current screen brightness programmatically
Window window = ((Activity) getContext()).getWindow();
LayoutParams layoutpars = window.getAttributes();
layoutpars.screenBrightness = value / (float) MAX_BRIGHTNESS_VALUE;
window.setAttributes(layoutpars);
}

private int getBrightness() {
try {
return Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
} catch (SettingNotFoundException e) {
e.printStackTrace();
return MAX_BRIGHTNESS_VALUE;
}
}

private void setAutomaticBrightness() {
Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}

private void setManualBrightness() {
Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}

private int getBrightnessMode() {
try {
return Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
} catch (SettingNotFoundException e) {
e.printStackTrace();
return Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
}
}

我有<uses-permission android:name="android.permission.WRITE_SETTINGS" />在我的 AndroidManifest.xml

有人知道这是怎么回事吗?我见过一些 Stack Overflow 线程有类似的问题,但没有一个得到任何有用的答案。

最佳答案

如果您将亮度模式设置为自动。那么您需要在设置亮度之前停止自动亮度调节。这段代码对我有用:

      public static void stopAutoBrightness(Activity activity) {
android.provider.Settings.System.putInt(activity.getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE,
android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}

关于android - 使用自动模式时以编程方式更改亮度在 Android 中没有任何效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24735618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com