Уменьшить свет на экране на активность
В моем приложении при определенных действиях экран должен всегда оставаться активным (классический 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;
}