Как включить и выключить автояркость? (не повторение) - PullRequest
5 голосов
/ 18 февраля 2012

Я просто пытаюсь включить и выключить автояркость.Я начал с этого кода (внутри метода onCreate)

final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.brightToggle);

    // display auto brightness state
    final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.autoToggle);
    autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode()));

    autoBrightToggle.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (autoBrightToggle.isChecked()) {
                setAutoBright(true);
            } else {
                setAutoBright(false);
            }
        }
    }); // end anonymous OnClickListener function

    // toggle the brightness mode
    private void  setAutoBright(boolean mode) {
      if (mode) {
        Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
        autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode()));
      } else {
        Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
        autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode()));
      }
    }

, который, похоже, не работает.Метод setAutoBrightnessMode () также вызывается снова в onResume (), но с теми же не-результатами.В любом случае, извините, если кто-то считает этот вопрос излишним, но другие посты не дали мне понять, куда мне нужно идти!

(FWIW - я тестирую это на моем старом Droid X и на Galaxy Nexus, а не на эмуляторе)

РЕДАКТИРОВАНИЕ - ОБНОВЛЕНИЕ НА ЭТОМ: Теперь я уверен на 99%не вижу каких-либо изменений в режиме Auto-Brightness, отображаемых на панели «Настройки» и в виджетах рабочего стола - , хотя Возможно, я действительно изменяю его значение.Частично проблема заключается в том, что я не знаю, как точно определить , включена ли автояркость или нет!

Например, экран быстро и заметно меняется?Я ожидал немедленных видимых изменений яркости в зависимости от окружающей среды - но, возможно, эти изменения неуловимы?и в течение более длительного периода?или, возможно, требуется 30 или более секунд, чтобы изменить яркость окружающей среды?

Может кто-нибудь подсказать, как я могу это отследить?Я попытался запросить константу Settings.System.SCREEN_BRIGHTNESS_MODE - подключить этот метод к текстовому полю:

   private int getAutoBrightnessMode() {
     try {
        int brightnessMode = Settings.System.getInt(cr, SCREEN_BRIGHTNESS_MODE);
     } catch (Settings.SettingNotFoundException e) {
        e.printStackTrace();
        int brightnessMode = -10000;
     }
    return brightnessMode;
   }

Но он всегда читает 0, даже после onResume ().: - ((

Я знаю, что это простая процедура, но я пытаюсь изучить этот материал самостоятельно, и у меня почти не было формального обучения CS ... Так что все, что я могу сказать, это я 'Я очень расстроен этим и чувствую, что я загнал себя в угол, и в этот момент я так раздражен, что больше не могу мыслить прямо.

Так что помощь будет отличной.

1 Ответ

8 голосов
/ 21 февраля 2012

Я использую следующий подход в моем приложении.Протестировано на HTC Desire HD и паре неимеальных китайских планшетов.
Добавить в манифест разрешение:

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

И используйте приведенный ниже код для переключения автоматической яркости.В коде есть одна хитрость: нам нужно «обновить» яркость приложения вручную, потому что оно не меняется автоматически.Может быть, это проблема в вашем случае.

void setAutoBrightness(boolean value) {
    if (value) {
        Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
    } else {
        Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
    }

    // After brightness change we need to "refresh" current app brightness
    if (isChecked) {
        refreshBrightness(-1);
    } else {
        refreshBrightness(getBrightnessLevel());
    }
}

private void refreshBrightness(float brightness) {
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    if (brightness < 0) {
        lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
    } else {
        lp.screenBrightness = brightness;
    }
    getWindow().setAttributes(lp);
}

int getBrightnessLevel() {
    try {
        int value = Settings.System.getInt(getContentResolver(), SCREEN_BRIGHTNESS);
        // convert brightness level to range 0..1
        value = value / 255;
        return value;
    } catch (SettingNotFoundException e) {
        return 0;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...