Подтвердить что ты не робот

Изменение яркости экрана программно (как с помощью виджета питания)

Я искал, как изменить яркость экрана программно, и я нашел это, это очень хорошее решение, и оно работает хорошо, но оно работает только во время моего приложения активен. После того, как мое приложение отключится, яркость вернется обратно к тому же значению, что и до того, как я запустил приложение.

Я хочу иметь возможность изменять яркость так же, как когда я нажимаю кнопку яркости от своего виджета. В виджетах власти, которые поступают от android, есть 3 состояния. Один очень яркий, очень темный и один между ними. Можно ли изменить яркость, как если бы кто-то нажал на этот виджет?

enter image description here

Edit1: Я создал это, и я добавил разрешение на мой манифест, но когда приложение запущено, я не вижу никаких изменений в яркости, я пробовал с 10 с 100 и теперь с 200, но без изменений любые предложения?

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
android.provider.Settings.System.putInt(this.getContentResolver(),
        android.provider.Settings.System.SCREEN_BRIGHTNESS, 200);
}
4b9b3361

Ответ 1

Это полный код, который я нашел для работы:

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

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

startActivity(new Intent(this,RefreshScreen.class));

Код из моего вопроса не работает, потому что экран не обновляется. Таким образом, один взлом при обновлении экрана запускает фиктивную активность, а не при создании этой фиктивной активности, чтобы вызвать finish(), чтобы изменения яркости вступили в силу.

Ответ 2

Используйте решение Tor-Morten в этой ссылке, но также установите настройку яркости системы следующим образом:

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

Где bright - целое число от 1 до 255.

Ответ 3

Я решил эту проблему сегодня.

В качестве первого вы должны ввести разрешение в свой файл AndroidManifest.xml:

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

Где точное место, чтобы поместить его в файл?

<manifest>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <application>
        <activity />
    </application>
</manifest>

В этом разрешении указывается, что вам разрешено изменять настройки, которые также влияют на другие приложения.

Теперь вы можете включить и выключить автоматический режим яркости

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);  //this will set the automatic mode on
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);  //this will set the manual mode (set the automatic mode off)

Включен или выключен автоматический режим? Вы можете получить информацию

int mode = -1;
try {
    mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); //this will return integer (0 or 1)
} catch (Exception e) {}

Итак, если вы хотите вручную изменить яркость, вы должны сначала установить ручной режим, а затем вы можете изменить яркость.

Примечание: SCREEN_BRIGHTNESS_MODE_AUTOMATIC - 1

Примечание: SCREEN_BRIGHTNESS_MODE_MANUAL = 0

Вы должны использовать этот

if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
    //Automatic mode
} else {
    //Manual mode
}

вместо этого

if (mode == 1) {
    //Automatic mode
} else {
    //Manual mode
}

Теперь вы можете вручную изменить яркость

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness);  //brightness is an integer variable (0-255), but dont use 0

и яркость чтения

try {
    int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);  //returns integer value 0-255
} catch (Exception e) {}

Теперь все настроено правильно, но... вы еще не видите изменения. Вам нужно еще одно, чтобы увидеть изменения! Обновите экран... сделайте так:

    try {
        int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);  //this will get the information you have just set...

        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = (float) br / 255; //...and put it here
        getWindow().setAttributes(lp);
    } catch (Exception e) {}

Не забудьте разрешение...

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

Ответ 4

Передача контекста активности при настройке параметров также обеспечит выполнение задания без необходимости запуска другого действия. Следующие работали для меня -

WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.screenBrightness =0.00001f;// i needed to dim the display
this.getWindow().setAttributes(lp);

У меня был этот кусок кода внутри метода onSensorChanged(), который затемнял дисплей всякий раз, когда он запускался.

Ответ 5

КОМПЛЕКСНЫЙ ПРИМЕР:

    try {
        //sets manual mode and brightnes 255
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);  //this will set the manual mode (set the automatic mode off)
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255);  //this will set the brightness to maximum (255)

        //refreshes the screen
        int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = (float) br / 255;
        getWindow().setAttributes(lp);

    } catch (Exception e) {}