我正在搜索如何以编程方式更改屏幕亮度,我发现this这是一个非常好的解决方案并且效果很好,但只有在我的应用处于活动状态时它才有效。在我的应用程序关闭后,亮度将返回与我启动应用程序之前相同的值。
我希望能够改变亮度,就像我从电源小部件按下亮度按钮一样。在来自android的电源小部件中有3个状态。一个非常明亮的一个非常黑暗,一个介于两者之间是否有可能像有人按下这个小部件一样改变亮度?
EDIT1: 我创建了这个并且我在清单中添加了permision但是当应用程序启动时我没有看到亮度有任何变化,我尝试使用10和100,现在有200但没有变化 有什么建议吗?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
android.provider.Settings.System.putInt(this.getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS, 200);
}
答案 0 :(得分:40)
这是我发现的完整代码:
Settings.System.putInt(this.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS, 20);
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness =0.2f;// 100 / 100.0f;
getWindow().setAttributes(lp);
startActivity(new Intent(this,RefreshScreen.class));
我的问题中的代码不起作用,因为屏幕没有刷新。因此,刷新屏幕的一个方法是启动虚拟活动,而不是在创建虚拟活动时调用finish()
,以便亮度的变化生效。
答案 1 :(得分:13)
在该链接中使用Tor-Morten的解决方案,但也设置系统亮度设置如下:
android.provider.Settings.System.putInt(getContext().getContentResolver(),
android.provider.Settings.System.SCREEN_BRIGHTNESS, bright);
其中bright
是一个介于1到255之间的整数。
答案 2 :(得分:10)
我今天解决了这个问题。
首先,你需要在AndroidManifest.xml文件中添加权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
将文件放在文件中的确切位置在哪里?
<manifest>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<application>
<activity />
</application>
</manifest>
此权限说明,您也可以更改影响其他应用程序的设置。
现在您可以开启和关闭亮度自动模式
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); //this will set the automatic mode on
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); //this will set the manual mode (set the automatic mode off)
现在是开启还是关闭自动模式?您可以获取信息
int mode = -1;
try {
mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); //this will return integer (0 or 1)
} catch (Exception e) {}
因此,如果您想手动更改亮度,则应首先设置手动模式,之后可以更改亮度。
注意:SCREEN_BRIGHTNESS_MODE_AUTOMATIC为1
注意:SCREEN_BRIGHTNESS_MODE_MANUAL为0
你应该使用这个
if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
//Automatic mode
} else {
//Manual mode
}
而不是
if (mode == 1) {
//Automatic mode
} else {
//Manual mode
}
现在您可以手动更改亮度
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness); //brightness is an integer variable (0-255), but dont use 0
并读取亮度
try {
int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //returns integer value 0-255
} catch (Exception e) {}
现在一切都设置得很好,但是......你还没有看到变化。 你还需要一件事才能看到变化! 刷新屏幕......所以这样做:
try {
int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //this will get the information you have just set...
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = (float) br / 255; //...and put it here
getWindow().setAttributes(lp);
} catch (Exception e) {}
不要忘记许可......
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
答案 3 :(得分:7)
在设置参数的同时传递活动的上下文也可以完成工作,而无需启动其他活动。 以下对我有用 -
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.screenBrightness =0.00001f;// i needed to dim the display
this.getWindow().setAttributes(lp);
我在 onSensorChanged()方法中有这段代码,只要触发它就会使显示变暗。
答案 4 :(得分:3)
复杂的例子:
try {
//sets manual mode and brightnes 255
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); //this will set the manual mode (set the automatic mode off)
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255); //this will set the brightness to maximum (255)
//refreshes the screen
int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = (float) br / 255;
getWindow().setAttributes(lp);
} catch (Exception e) {}