Modification de la configuration du système de luminosité de l'écran Android

Je tente de modifier la luminosité de l'écran au moyen d'un service, de la manière suivante:

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

Le problème est que cela ne fonctionne pas. Eh bien, il réussit à modifier le réglage de la luminosité, mais la luminosité de l'écran ne change pas jusqu'à ce que je n'arrive pas dans les réglages du téléphone, regarde la nouvelle valeur et frappe Ok.

  • Comment un service d'intention est-il déclaré dans le manifeste Android?
  • Est-il correct d'appeler Service.startService () à partir de Service.onBind ()?
  • Android - Démarrage d'un service avec des informations supplémentaires via put / getExtra
  • Comment obtenir le format de date sélectionné par l'utilisateur dans Android?
  • Application pour surveiller d'autres applications sur Android
  • Qu'est ce que "Stub" et "AIDL" pour java?
  • Y at-il quelque chose que je dois faire après avoir défini la valeur pour que la luminosité change?

    4 Solutions collect form web for “Modification de la configuration du système de luminosité de l'écran Android”

    J'ai eu le même problème de changer la luminosité de l'écran dans un service, et il y a quelques jours, je l'ai résolu avec succès (et j'ai mis à jour mon programme Phone Phone avec la fonction de luminosité;)). Ok, donc c'est le code que vous avez mis dans votre service:

     // This is important. In the next line 'brightness' // should be a float number between 0.0 and 1.0 int brightnessInt = (int)(brightness*255); //Check that the brightness is not 0, which would effectively //switch off the screen, and we don't want that: if(brightnessInt<1) {brightnessInt=1;} // Set systemwide brightness setting. Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightnessInt); // Apply brightness by creating a dummy activity Intent intent = new Intent(getBaseContext(), DummyBrightnessActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("brightness value", brightness); getApplication().startActivity(intent); 

    Veuillez noter que dans l'extrait de code ci-dessus, j'utilise deux variables pour la luminosité. L'un est la brightness , qui est un nombre de flot entre 0,0 et 1,0, l'autre est la brightnessInt , qui est un nombre entier entre 0 et 255. La raison en est que Settings.System nécessite un nombre entier pour stocker la valeur de luminosité du système, tandis que le lp.screenBrightness que vous verrez dans l'extrait de code suivant nécessite un flotteur. Ne me demandez pas pourquoi ne pas utiliser la même valeur, c'est comme il l'était dans Android SDK, alors nous allons devoir vivre avec ça.

    C'est le code de DummyBrightnessActivity:

     public class DummyBrightnessActivity extends Activity{ private static final int DELAYED_MESSAGE = 1; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new Handler() { @Override public void handleMessage(Message msg) { if(msg.what == DELAYED_MESSAGE) { DummyBrightnessActivity.this.finish(); } super.handleMessage(msg); } }; Intent brightnessIntent = this.getIntent(); float brightness = brightnessIntent.getFloatExtra("brightness value", 0); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = brightness; getWindow().setAttributes(lp); Message message = handler.obtainMessage(DELAYED_MESSAGE); //this next line is very important, you need to finish your activity with slight delay handler.sendMessageDelayed(message,1000); } } 

    Voici comment vous ajoutez votre activité à AndroidManifest.xml, probablement la partie la plus importante:

     <activity android:name="com.antonc.phone_schedule.DummyBrightnessActivity" android:taskAffinity="com.antonc.phone_schedule.Dummy" android:excludeFromRecents="true" android:theme="@style/EmptyActivity"></activity> 

    Une petite explication sur ce qui se passe.

    android:taskAffinity doit être différent de celui de votre paquetage! Cela rend DummyBrightnessActivity démarré non dans votre pile principale d'activités, mais dans un autre, ce qui signifie que lorsque DummyBrightnessActivity est fermée, vous ne verrez pas la prochaine activité, quelle qu'elle soit. Jusqu'à ce que j'ai inclus cette ligne, la fermeture de DummyBrightnessActivity entraînerait mon activité principale.

    android:excludeFromRecents="true" rend cette activité non disponible dans la liste des applications lancées récemment, que vous désirez définitivement.

    android:theme="@style/EmptyActivity" définit la manière dont DummyBrightnessActivity ressemble à l'utilisateur, et c'est là que vous l'avez rendu invisible. C'est ainsi que vous définissez ce style dans le fichier styles.xml:

     <style name="EmptyActivity" parent="android:Theme.Dialog"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@android:style/Animation.Toast</item> <item name="android:background">#00000000</item> <item name="android:windowBackground">#00000000</item> <item name="android:windowNoTitle">true</item> <item name="android:colorForeground">#000</item> </style> 

    De cette façon, votre DummyBrightnessActivity sera invisible pour l'utilisateur. Je ne sais pas si tous ces paramètres de style sont vraiment nécessaires, mais cela fonctionne pour moi de cette façon.

    J'espère que cela l'explique, mais si vous avez des questions, laissez-moi savoir.

    Je viens de vérifier JB. Le code suivant est suffisant pour régler la luminosité d'un service

      android.provider.Settings.System.putInt(mContext.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); android.provider.Settings.System.putInt(mContext.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, brightnessInt); 

    La première ligne annule la luminosité automatique.

    Vous devrez peut-être le faire via l'objet Window .

    Par exemple,

     WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness= lp.screenBrightness*1.25; getWindow().setAttributes(lp); 

    Une manière moins intrusive (en utilisant beaucoup moins de code) est:

     android.provider.Settings.System.putInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, bright); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); pm.userActivity(SystemClock.uptimeMillis(), false); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.