Уменьшить свет на экране на активность

В моем приложении при определенных действиях экран должен всегда оставаться активным (классический keepScreenOn).

Для того, чтобы немного уменьшить потребление батареи, я хотел бы внедрить энергосберегающую систему (аналогичную стандартной):

После 10 секунд бездействия яркость сводится к минимуму (без отправки активности, приостановленной или аналогичной), чтобы нажать, яркость возвращается к нормальной и так далее...

Возможно ли реализовать такую ​​систему? есть автоматический способ подсчета времени простоя? (потому что в противном случае я бы создал перезарядку от 10 до 0, чтобы перенести ее на 10 до каждого нажатия пользователя...)

большое спасибо

4 ответа

Я думаю, что это возможно с помощью WindowManager.LayoutParams:

WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.screenBrightness = 1F; // or whatever, but a float
getWindow().setAttributes(layoutParams);

Значение варьировалось от 0 (темный) до 1 (светлый). Значение ниже 0 сбрасывает значение Android по умолчанию.

Попробуйте использовать Settings.System.SCREEN_BRIGHTNESS, чтобы установить яркость системы по умолчанию:

android.provider.Settings.System.putInt(getContentResolver(),  
android.provider.Settings.System.SCREEN_BRIGHTNESS,brightness /100.0f); // 0-255 

и добавить эти разрешения в манифесте:

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

Используйте TimerTask для обработки времени

использование

@Override
public void onUserInteraction() {
    // TODO Auto-generated method stub
    super.onUserInteraction();

    Log.d(TRCU.LOG_TAG,"User Interaction : "+userInteractionTimeout);

}

чтобы получить событие взаимодействия с пользователем

А также вы можете отрегулировать яркость, используя

         // Update brightness Instantly
         WindowManager.LayoutParams lp =((Activity) context).getWindow().getAttributes();
         lp.screenBrightness =mCurrentValue/ 255.0f;

         ((Activity) context).getWindow().setAttributes(lp);

Сначала напишите следующее разрешение в файле manifest.xml

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

затем по истечении 10 секунд запустите следующий код, чтобы уменьшить яркость устройства до его более низкого уровня:

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 0); //Set the system brightness
android.view.WindowManager.LayoutParams w_lp = getWindow().getAttributes(); //Get the current window attributes
w_lp.screenBrightness = progress / (float)255; //Set the brightness of this window
getWindow().setAttributes(w_lp); //Apply attribute changes to this window

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

public class YOUR_ACTIVITY extends Activity {

public static int x = 0; // must be static

@Override
protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       run_thread();
}

private void run_thread(){
    Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {
            while(x < 10){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                x++;
            }

    Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 0); //Set the system brightness to it's lowest value
    android.view.WindowManager.LayoutParams w_lp = getWindow().getAttributes(); //Get the current window attributes
    w_lp.screenBrightness = progress / (float)255; //Set the brightness of this window
    getWindow().setAttributes(w_lp); //Apply attribute changes to this window

        }
    });
    thread.start();
}


@Override 
public boolean onTouchEvent(MotionEvent event) {
    x = 0;

    Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255); //Set the system brightness back to it's full value
    android.view.WindowManager.LayoutParams w_lp = getWindow().getAttributes(); //Get the current window attributes
    w_lp.screenBrightness = progress / (float)255; //Set the brightness of this window
    getWindow().setAttributes(w_lp); //Apply attribute changes to this window

    return true;
}
Другие вопросы по тегам