2012-03-07 2 views
2

Привет Я пробовал все решения в Интернете и в SO, но ничего не работает. У меня есть оверлей (служба), которые всплывают во весь экран при нажатии на триггер. На наложении я добавил несколько ярлыков, регуляторы громкости и управление яркостью. Дело в том, что независимо от того, что я делаю, яркость не сразу меняет экран (мне нужно выключить и включить экран).Настройка яркости в Android - ничего не работало до сих пор

Это то, что я называю, когда ползунок яркости обновляется:

@Override 
      public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 

       int value = (int)(arg1*255.0/100); 
       int V=-1; 
       try { 
        V=android.provider.Settings.System.getInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS); 
       } catch (SettingNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       System.out.println("V="+V+"brightness="+value); 
       //android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
       android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, value); 
       android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); 
//    Intent intent= new Intent(getContext(), Bright.class); 
//    Bundle b=new Bundle(); 
//    b.putFloat("lvl", (float)(arg1*0.01)); 
//    intent.putExtras(b); 
//    //intent.putExtra("lvl", (float)(arg1*0.01)); 
//    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
//    getContext().startActivity(intent); 
      } 
     }); 

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

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
lp.screenBrightness=0.9f; 
getWindow().setAttributes(lp); 

К сожалению, ни один из приведенных выше решений, кажется, работа на всех в моем случае. Кажется, что WindowManager ничего не делает. Наверное, это то, как реализовано мое приложение (системное оверлейное, а не «классическое» окно)

В любом случае, я вдруг заметил, что слайдер начал работать, когда я покинул окно «Настройки»> «Яркость», открытое в фоновом режиме. Таким образом, слайдер будет иметь прямое управление яркостью системы, просто установив две строки:

android.provider.Settings.System.putInt (getContext(). GetContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, значение); android.provider.Settings.System.putInt (getContext(). GetContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);

Значит, это означает, что когда происходит «какой-то процесс», происходящий в фоновом режиме, регулировка яркости очень проста (как СЛЕДУЕТ!). Может ли кто-нибудь помочь мне попытаться понять, КАК я могу получить тот же эффект? Я был бы готов просто запустить окно яркости с помощью командной строки (если бы я знал, как это сделать), но я, очевидно, хотел бы получить более тонкое решение.

Пожалуйста, дайте мне знать, что вы думаете.

веселит

Emanuele

ответ

2

Используйте это, он должен работать:

final WindowManager.LayoutParams window_params=getWindow().getAttributes(); 
window_params.screenBrightness=1f; 
getWindow().setAttributes(window_params); 

screenBrightness является betwen 0.0f и 1.0f.

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

+1

ЭТО РАБОТАЕТ! он начал работать после того, как я добавил «final» перед «WindowManager.LayoutParams», но потом снова взял его, и он все еще работал. Я перезагрузился, и теперь он работает с или без «финала». Это просто совпадение или действительно ли «окончательный» имеет значение? Большое спасибо в любом случае! – Lele

+0

(вы правы в 10f, я оставил его там по ошибке, но я действительно использовал значения между 0 и 1. Я обновил код сейчас. Приветствия! – Lele