2011-01-10 41 views
10

我正在尝试从小部件中设置屏幕亮度。我们知道这是很容易可能的,因为吨的小部件已经这样做了,但如何.....刷新小部件的显示?

在服务我从窗口小部件拨打我做这个设置亮度:

Settings.System.putInt(this.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 200); 

这一工程除非它不刷新屏幕以应用新的设置。关闭和关闭屏幕会刷新显示设置,因此我们知道代码正常工作。

我也在几个网站上看过类似的东西会刷新屏幕,但我们不能使用它,因为我们在一个小部件。小部件活动和服务不能使用getWindow。

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
lp.screenBrightness = 100/100.0f; 
getWindow().setAttributes(lp); 

要不然怎么都是这些小部件一样美丽的小工具,功率控制,扩展控制,等等这样做呢?

更新: 另一个海报推荐开启空活动并执行WindowManager刷新。这很有效,但它为第二个屏幕带来了一个丑陋的黑屏。由于其他小部件不这样做,所以必须有一种方法来保持不显示空白的黑屏。

+1

对于blackscreen,设置主题上的活性,含有这样:<样式名称= “Theme.Transparent” 父= “机器人:主题”> <项名称= “机器人:windowIsTranslucent”>真 <项名称= “机器人:windowBackground”> @彩色/透明 <项目名= “机器人:windowContentOverlay”> @空 <项目名= “机器人:windowNoTitle”>真 <项目名= “机器人:windowIsFloating” > true false 2011-01-10 06:26:38

+0

工作完美!您是否想将其作为下面的答案发布给所有人?我用你的主题,并将其设置在我的清单中。 – pcm2a 2011-01-10 17:55:12

回答

8

对于blackscreen,设置一个主题的活动,包含此:

<style name="Theme.Transparent" parent="android:Theme"> 
<item name="android:windowIsTranslucent">true</item> 
<item name="android:windowBackground">@color/transparent</item> 
<item name="android:windowContentOverlay">@null</item> 
<item name="android:windowNoTitle">true</item> 
<item name="android:windowIsFloating">true</item> 
<item name="android:backgroundDimEnabled">false</item> 
</style> 

感谢塞巴斯蒂安的回答,我在这里复制它。