Настройка яркости в Android - пока ничего не получалось - PullRequest
2 голосов
/ 07 марта 2012

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

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

@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 (), доступной), я также попробовал хитрость создания поддельной Activity, которая вызывает код (также найденный в сети)

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, value); android.provider.Settings.System.putInt (getContext (). getContentResolver (), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);

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

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

ура

Emanuele

1 Ответ

2 голосов
/ 07 марта 2012

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

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

screenBrightness между 0.0f и 1.0f.

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

...