2011-01-10 15 views
10

Estoy tratando de configurar el brillo de la pantalla desde un widget. Sabemos que esto es fácilmente posible, ya que un montón de widgets de hacer esto ya, pero ¿cómo .....Actualizando la pantalla desde un widget?

En un servicio que llamo desde el widget que hago esto para ajustar el brillo:

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

que funciona genial, excepto que no "actualiza" la pantalla para aplicar la nueva configuración. Apagar y encender la pantalla actualiza la configuración de visualización, por lo que sabemos que el código funciona.

También leí en varios sitios que algo como esto actualizará la pantalla, pero no podemos usar esto ya que estamos en un widget. La actividad del widget y el servicio no pueden usar getWindow.

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

¿Cómo, si están todos estos widgets como Beautiful Widgets, control de potencia, controles extendidos, etc haciendo esto?

Actualización: Otro póster recomendaba el inicio de una actividad vacía y la ejecución de la actualización de WindowManager. Eso funciona pero trae una fea pantalla negra por un segundo. Como los otros widgets no hacen esto, tiene que haber una forma de evitar que se muestre la fea pantalla en blanco.

+1

Para el blackscreen, definir un tema en la actividad, que contiene lo siguiente:

+0

¡Eso funcionó a la perfección! ¿Desea publicar eso como respuesta a continuación para todos? Usé tu tema y lo puse en mi manifiesto. – pcm2a

Respuesta

8

Para el blackscreen, definir un tema en la actividad, que contiene lo siguiente:

<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> 

Gracias Sebastián por la respuesta, he copiado aquí dentro.

+2

esta es realmente una buena respuesta, pero tengo una nota. En lugar de @ color/transparent put @android: color/transparent – Lukap

Cuestiones relacionadas