您好我在网上和SO中尝试了所有解决方案,但没有任何效果。当你点击触发器时,我有一个全屏弹出的覆盖(服务)。在叠加层上我放了一些快捷键,音量控制和亮度控制。关键是无论我做什么,亮度都不会立即改变屏幕(我需要关闭和打开屏幕)。
这是我更新亮度滑块时调用的内容:
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
int value = (int)(arg1*255.0/100);
int V=-1;
try {
V=android.provider.Settings.System.getInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS);
} catch (SettingNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("V="+V+"brightness="+value);
//android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, value);
android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
// Intent intent= new Intent(getContext(), Bright.class);
// Bundle b=new Bundle();
// b.putFloat("lvl", (float)(arg1*0.01));
// intent.putExtras(b);
// //intent.putExtra("lvl", (float)(arg1*0.01));
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// getContext().startActivity(intent);
}
});
如果您关闭和打开屏幕,则无效。由于该类是一个服务(没有getWindow()可用),我还尝试了产生一个调用代码的虚假活动的技巧(也可以在网上找到)
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness=0.9f;
getWindow().setAttributes(lp);
不幸的是,在我的情况下,上述解决方案似乎都不起作用。 WindowManager似乎什么都不做。可能这是我的应用程序的实现方式(系统覆盖而不是“经典”窗口)
无论如何,我突然发现当我在后台打开设置>亮度窗口时滑块开始工作。这样滑块就可以通过设置两条线来直接控制系统亮度
android.provider.Settings.System.putInt(getContext()。getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS,value); android.provider.Settings.System.putInt(getContext()。getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE,android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
所以这意味着当背景中发生“某个过程”时,亮度的调节非常容易(因为它应该!)。任何人都可以帮助我试着理解我可以获得相同的效果吗?我可以用命令行启动亮度窗口(如果我知道的话),但我显然想要一个更微妙的解决方案。
请让我知道你的想法。
欢呼声
Emanuele的
答案 0 :(得分:2)
使用它,它应该工作:
final WindowManager.LayoutParams window_params=getWindow().getAttributes();
window_params.screenBrightness=1f;
getWindow().setAttributes(window_params);
screenBrightness介于0.0f和1.0f之间。
对不起,我注意到你已经尝试过这段代码。我没有使用叠加应用,所以无法帮助你。