Mise à jour Luminosité de l'écran sur Android après la modification par programme

StackOverflow https://stackoverflow.com/questions/4366255

  •  09-10-2019
  •  | 
  •  

Question

Je suis en train de mettre à jour la luminosité de l'écran à partir d'un widget, mais j'ai quelques problèmes.

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

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

modifie le réglage d'affichage de (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éverrouillage, la luminosité change enfin à la valeur de consigne i.

Je suppose que cela est un problème de mise à jour des paramètres, donc comment les paramètres d'affichage mis à jour immédiatement après le changement des paramètres?

Je lis que WindowManager.LayoutParams lp = getWindow().getAttributes(); doit être utilisé, mais je travaille dans un Widget App si getWindow () ne peut pas être appelé.

Était-ce utile?

La solution

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

Autres conseils

En premier lieu, la valeur à modifier dans LayoutParams est screenBrightness . Vous devrez alors faire window.setAttributes pour l'appliquer. Comme geekyouup dit, vous pouvez faire une activité factice pour obtenir votre objet fenêtre.

Peut-on 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 bien fonctionne 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 ne devez le contexte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top