webentwicklung-frage-antwort-db.com.de

Ändern Sie die Systemhelligkeit programmgesteuert

Ich möchte die Systemhelligkeit programmgesteuert ändern. Zu diesem Zweck benutze ich diesen Code:

WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = (255);
window.setAttributes(lp);

weil ich gehört habe, dass der maximale Wert 255 ist.

aber es tut nichts. Bitte schlagen Sie alles vor, was die Helligkeit verändern kann. Vielen Dank

37
Usman Riaz

Sie können Folgendes verwenden:

//Variable to store brightness value
private int brightness;
//Content resolver used as a handle to the system's settings
private ContentResolver cResolver;
//Window object, that will store a reference to the current window
private Window window;

In Ihrem onCreate schreiben Sie:

//Get the content resolver
cResolver = getContentResolver();

//Get the current window
window = getWindow();

    try
            {
               // To handle the auto
                Settings.System.putInt(cResolver,
                Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
 //Get the current system brightness
                brightness = Settings.System.getInt(cResolver, Settings.System.SCREEN_BRIGHTNESS);
            } 
            catch (SettingNotFoundException e) 
            {
                //Throw an error case it couldn't be retrieved
                Log.e("Error", "Cannot access system brightness");
                e.printStackTrace();
            }

Schreiben Sie den Code, um die Helligkeitsänderung zu überwachen.

dann können Sie die aktualisierte Helligkeit wie folgt einstellen:

           //Set the system brightness using the brightness variable value
            Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness);
            //Get the current window attributes
            LayoutParams layoutpars = window.getAttributes();
            //Set the brightness of this window
            layoutpars.screenBrightness = brightness / (float)255;
            //Apply attribute changes to this window
            window.setAttributes(layoutpars);

Erlaubnis im Manifest:

<uses-permission Android:name="Android.permission.WRITE_SETTINGS"/>

Für API> = 23 müssen Sie die Berechtigung über die hier beschriebene Einstellungsaktivität anfordern: WRITE_SETTINGS-Berechtigung nicht verfügbar

44
Ritesh Gune

Ich hatte das gleiche problem.

Zwei Lösungen:

hier Helligkeit = (int) 0 to 100 range wie ich Progressbar benutze

1 LÖSUNG

float brightness = brightness / (float)255;
WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = brightness;
        getWindow().setAttributes(lp);

2 LÖSUNG

Ich habe gerade Dummy-Aktivität zum Aufrufen verwendet, als mein Fortschrittsbalken stop gesucht hat.

 Intent intent = new Intent(getBaseContext(), DummyBrightnessActivity.class);
                    Log.d("brightend", String.valueOf(brightness / (float)255));
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //this is important
                    //in the next line 'brightness' should be a float number between 0.0 and 1.0
                    intent.putExtra("brightness value", brightness / (float)255); 
                    getApplication().startActivity(intent);

Kommen wir nun zur DummyBrightnessActivity.class

 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,200); 
}

}

vergiss nicht, DummyBrightnessActivity zu registrieren, um es zu manifestieren.

ich hoffe es hilft!!

14

Ich habe mehrere Lösungen ausprobiert, die andere veröffentlicht haben, und keine davon hat genau richtig funktioniert. Die Antwort von Geet ist grundsätzlich korrekt, weist jedoch einige syntaktische Fehler auf. Ich habe die folgende Funktion in meiner Anwendung erstellt und verwendet und sie hat hervorragend funktioniert. Beachten Sie, dass sich hierdurch die Systemhelligkeit ändert, wie in der ursprünglichen Frage angegeben.

public void setBrightness(int brightness){

    //constrain the value of brightness
    if(brightness < 0)
        brightness = 0;
    else if(brightness > 255)
        brightness = 255;


    ContentResolver cResolver = this.getApplicationContext().getContentResolver();
    Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness);

}
10
user3092247

Referenzlink

  WindowManager.LayoutParams layout = getWindow().getAttributes();
 layout.screenBrightness = 1F;
  getWindow().setAttributes(layout);     
9
Amit Prajapati

das hat bei mir bis KitKat 4.4 geklappt aber nicht in Android L

private void stopBrightness() {
    Settings.System.putInt(this.getContentResolver(),
            Settings.System.SCREEN_BRIGHTNESS, 0);
}
4
user3475052

Dies ist der vollständige Code zum Ändern der Systemhelligkeit

    private SeekBar brightbar;

    //Variable to store brightness value
    private int brightness;
    //Content resolver used as a handle to the system's settings
    private ContentResolver Conresolver;
    //Window object, that will store a reference to the current window
    private Window window;

    /** Called when the activity is first created. */
    @Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //Instantiate seekbar object
        brightbar = (SeekBar) findViewById(R.id.ChangeBright);

        //Get the content resolver
        Conresolver = getContentResolver();

        //Get the current window
        window = getWindow();

        brightbar.setMax(255);

        brightbar.setKeyProgressIncrement(1);

        try {
            brightness = System.getInt(Conresolver, System.SCREEN_BRIGHTNESS);
        } catch (SettingNotFoundException e) {
            Log.e("Error", "Cannot access system brightness");
            e.printStackTrace();
        }

        brightbar.setProgress(brightness);

        brightbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            public void onStopTrackingTouch(SeekBar seekBar) {
                System.putInt(Conresolver, System.SCREEN_BRIGHTNESS, brightness);

                LayoutParams layoutpars = window.getAttributes();

                layoutpars.screenBrightness = brightness / (float) 255;

                window.setAttributes(layoutpars);
            }

            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                if (progress <= 20) {

                    brightness = 20;
                } else {

                    brightness = progress;
                }
            }
        });
    }

Oder überprüfen Sie diese Tutorial für vollständigen Code
fröhliche Kodierung :)

3
dondondon
<uses-permission Android:name="Android.permission.WRITE_SETTINGS"
        tools:ignore="ProtectedPermissions" />

Android.provider.Settings.System.putInt(getContentResolver(),
                    Android.provider.Settings.System.SCREEN_BRIGHTNESS,
                    progress);
2
private SeekBar Brighness = null;

@Override
protected void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_lcd_screen_setting);
     initUI();
     setBrightness();
}

private void setBrightness() {

    Brighness.setMax(255);
    float curBrightnessValue = 0;

    try {
        curBrightnessValue = Android.provider.Settings.System.getInt(
                getContentResolver(),
                Android.provider.Settings.System.SCREEN_BRIGHTNESS);
    } catch (Settings.SettingNotFoundException e) {
        e.printStackTrace();
    }
    int screen_brightness = (int) curBrightnessValue;
    Brighness.setProgress(screen_brightness);

    Brighness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        int progress = 0;


        @Override
        public void onProgressChanged(SeekBar seekBar, int progresValue,
                                      boolean fromUser) {
            progress = progresValue;
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // Do something here,
            // if you want to do anything at the start of
            // touching the seekbar
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            Android.provider.Settings.System.putInt(getContentResolver(),
                    Android.provider.Settings.System.SCREEN_BRIGHTNESS,
                    progress);
        }
    });
}

initUI(){
   Brighness = (SeekBar) findViewById(R.id.brightnessbar);
}

Fügen Sie dies im Manifest hinzu

<uses-permission Android:name="Android.permission.WRITE_SETTINGS"
 tools:ignore="ProtectedPermissions"/>
2
arshad shaikh
WindowManager.LayoutParams params = getWindow().getAttributes();
    params.screenBrightness = 10; // range from 0 - 255 as per docs
    getWindow().setAttributes(params);
    getWindow().addFlags(WindowManager.LayoutParams.FLAGS_CHANGED);

Das hat bei mir funktioniert. Keine Dummy-Aktivität erforderlich. Dies funktioniert nur für Ihre aktuelle Aktivität.

1
prago

Sie müssen die Variable erstellen:

private WindowManager.LayoutParams mParams;

überschreiben Sie dann diese Methode (um Ihre vorherigen Parameter zu speichern):

@Override
public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
    mParams = params;
    super.onWindowAttributesChanged(params);
}

als wo du die Bildschirmhelligkeit ändern willst (in der App) benutze einfach:

    mParams.screenBrightness = 0.01f; //use a value between 0.01f for low brightness and 1f for high brightness
    getWindow().setAttributes(mParams);

getestet auf API Version 28.

1
Tal Fiskus

Bitte versuchen Sie dies, es kann Ihnen helfen. Hat gut funktioniert für mich

Nach meiner Erfahrung

 1st method.
                     WindowManager.LayoutParams lp = getWindow().getAttributes();  
                 lp.screenBrightness = 75 / 100.0f;  
                 getWindow().setAttributes(lp);

wobei der Helligkeitswert sehr nach 1.0f.100f die maximale Helligkeit ist.

Der oben genannte Code erhöht die Helligkeit des aktuellen Fensters. Wenn wir die Helligkeit des gesamten Android Geräts erhöhen möchten, reicht dieser Code nicht aus, dafür müssen wir ihn verwenden

   2nd method.



       Android.provider.Settings.System.putInt(getContentResolver(),
                         Android.provider.Settings.System.SCREEN_BRIGHTNESS, 192); 

Wobei 192 der Helligkeitswert ist, der von 1 bis 255 reicht. Das Hauptproblem bei der Verwendung der zweiten Methode ist, dass die Helligkeit auf dem Android - Gerät in erhöhter Form angezeigt wird, die Helligkeit auf dem Android - Gerät jedoch nicht erhöht wird Das liegt daran, dass es etwas Erfrischung braucht.

Deshalb finde ich die Lösung heraus, indem ich beide Codes zusammen verwende.

            if(arg2==1)
                {

         WindowManager.LayoutParams lp = getWindow().getAttributes();  
                 lp.screenBrightness = 75 / 100.0f;  
                 getWindow().setAttributes(lp);  
                 Android.provider.Settings.System.putInt(getContentResolver(),
                         Android.provider.Settings.System.SCREEN_BRIGHTNESS, 192);


                    }

Bei mir hat es gut funktioniert

1
Ann