¿Cómo activar y desactivar el brillo automático? (No una repetición)

Simplemente intento activar y desactivar el brillo automático. Comencé con este código (dentro del método 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())); } } 

Lo cual no parece funcionar. El método setAutoBrightnessMode () también se llama de nuevo en onResume () pero con los mismos no resultados. De todos modos, lo siento si alguien siente que esta pregunta es redundante, pero los otros puestos no me llegan a donde tengo que ir!

(FWIW – estoy probando esto en mi viejo Droid X y mi Galaxy Nexus, no el emulador)

EDITADO – ACTUALIZACIÓN EN ESTO: Estoy 99% seguro ahora que no estoy viendo ningún cambio en el modo de Auto-Brillo reflejado en el panel de Configuración y widgets de escritorio – aunque realmente pueda estar cambiando su valor. Parte del problema es que no sé exactamente cómo determinar si Auto-Brillo está encendido o no!

Por ejemplo, ¿la pantalla cambia rápida y visiblemente? He estado esperando cambios inmediatos visibles en el brillo según el ambiente – pero quizás los cambios son sutiles? Y durante un período más largo? O tal vez toma 30 segundos o más de cambio de entorno antes de que cambie el brillo?

¿Puede alguien sugerir cómo puedo seguir esto? He intentado consultar la constante de Settings.System.SCREEN_BRIGHTNESS_MODE – enganchar este método hasta un textfield:

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

Pero siempre lee 0, incluso después de un onResume (). Unesdoc.unescobr

Sé que este es un procedimiento simple, pero estoy tratando de aprender estas cosas por mi cuenta, y no he tenido casi ningún entrenamiento CS formal … Así que todo lo que puedo decir es que estoy muy frustrado por esto y siento que ' He trabajado en un rincón y en este punto estoy tan molesto que no puedo pensar en línea recta más.

Así que la ayuda sería genial.

Utilizo el siguiente enfoque en mi aplicación. Probado en HTC Desire HD y un par de tabletas noname chinese.
Añadir al permiso de manifiesto:

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

Y utilice debajo del código para activar el brillo automático. Hay un truco en el código: tenemos que "actualizar" el brillo de la aplicación manualmente, ya que no cambia automáticamente. Puede ser que sea el problema en su caso.

 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; } } 
  • ¿Cuál es la intención de llamar a la pantalla "Elegir bloqueo de pantalla"?
  • Anular o desactivar el menú de configuración
  • ¡Atención! No se han encontrado directorios de símbolos - compruebe su configuración de depuración nativa
  • onConfigurationChanged () llamando dos veces cuando cambia la orientación de Paisaje a Retrato
  • Eclipse para convertir atributos XML en entradas de estilo
  • Android: La preferencia programática 'permitir reorientación' funciona sólo una vez
  • ¿Cómo puedo agregar botones personalizados en el diseño de AlertDialog?
  • ¿Código fuente para la actividad de configuración Wi-Fi de Android?
  • ¿Cómo puedo obtener la orientación actual de la pantalla?
  • ¿Cómo puedo seleccionar diferentes archivos de activos como el cambio de idioma con Locale y Configuración?
  • Agregar o quitar las entradas de idioma en el menú "Configuración" -> "Seleccionar configuración regional" en el teléfono Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.