2014-12-04 2 views
0

В моем приложении под определенной активностью необходимо всегда держать экран активным (classic keepScreenOn).Уменьшение света на экране активности

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

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

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

Большого спасибо

+0

ХТ tp: //stackoverflow.com/a/7658364/346232 –

ответ

0

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

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

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

+0

Эта функция устанавливает яркость только на активность или на устройство? – Lele

+0

Ваша «активность» только я предполагаю, потому что вы будете использовать объект 'Activity'' Window' ... – shkschneider

0

Использование 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); 
1

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

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" />

+0

эта функция устанавливает яркость только на активность или на устройство? – Lele

0

сначала написать следующее разрешение в файле 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; 
} 
Смежные вопросы