2010-12-06 6 views
9

J'essaie de mettre à jour la luminosité de l'affichage à partir d'un widget, mais j'ai quelques problèmes.Mettre à jour la luminosité de l'affichage sur Android après l'avoir modifié par programme

Pour modifier le niveau de luminosité, j'utilise:

Settings.System.putInt(context.getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS, 200); 

Cela modifie les paramètres d'affichage (en fait dans Display-> Luminosité le niveau est correct), mais la luminosité efficace de l'affichage ne change pas. Si je verrouille l'écran et déverrouille, la luminosité change finalement à la valeur que j'ai définie. Je suppose qu'il s'agit d'un problème de mise à jour des paramètres, alors comment les paramètres d'affichage peuvent-ils être mis à jour immédiatement après la modification des paramètres?

J'ai lu que WindowManager.LayoutParams lp = getWindow().getAttributes(); devrait être utilisé mais je travaille dans un Widget App pour que getWindow() ne puisse pas être appelé.

Répondre

6

J'ai eu un problème similaire et je viens de créer une activité sans interface utilisateur pour faire le changement de luminosité, utilisé une intention de l'exécuter à partir du widget App.

+0

Bonne idée! Vous avez créé une nouvelle classe d'activité ou l'avez liée dans le widget? – Mariux

+0

Depuis que vous avez résolu le problème, pouvez-vous écrire du code pour expliquer clairement? Merci GeekYouUp! – Mariux

+0

J'ai essayé de créer une activité, mais le changement de luminosité est appliqué à l'activité seulement ... – Mariux

1

Tout d'abord, la valeur à modifier dans LayoutParams est screenBrightness. Vous devrez alors faire un window.setAttributes pour l'appliquer. Comme GeekYouUp a dit, vous pouvez faire une activité factice pour obtenir votre objet fenêtre.

+0

Comment puis-je créer une activité fictive? –

+0

comme il l'a dit, vous créez une activité, juste associée à aucune interface utilisateur –

0

Pouvez-vous utiliser ce code dans votre RemoteView,

Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness); 

// This makes the new screen brightness effective 
WindowManager.LayoutParams layoutParams = ((Activity)context).getWindow().getAttributes(); 
float b = brightness/255.0f; 
if(b == 0.0)  
    b = 0.01f; 
layoutParams.screenBrightness = b; 
((Activity)context).getWindow().setAttributes(layoutParams); 

Ce code de belles œuvres lorsque vous réglez la luminosité de l'écran du téléphone à l'intérieur d'une classe définie par l'utilisateur qui est ne pas étendre une activité mais vous seulement besoin du contexte.