tiene studio saturacion programacion para pantalla como celular brillo aumentar arreglar android preferences brightness

studio - Obtén el brillo de pantalla preferido en Android



manual de programacion android pdf (2)

¿Cómo se obtiene el brillo de pantalla preferido en Android?

Para cambiar el brillo de la pantalla utilizo WindowManager.LayoutParams.screenBrightness . Según la documentación:

Esto se puede usar para anular el brillo preferido de la pantalla por parte del usuario. Un valor inferior a 0, el valor predeterminado, significa usar el brillo de pantalla preferido. 0 a 1 ajusta el brillo de oscuro a pleno brillo.

Cuando screenBrightness es menor que 0, me gustaría comenzar con el brillo de pantalla preferido. ¿Cómo puedo obtener este valor?


Bueno, para responder a la pregunta según lo solicitado, puede obtener el brillo preferido de Settings.system.SCREEN_BRIGHTNESS El rango parece ser 0-255.

int UserBrightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,-1);

Lo que en realidad es el brillo actual en este momento, según lo establecido en el modo Automático o una configuración de la aplicación, su propio brillo es una pregunta realmente diferente y también me interesaría la respuesta.


Intentaré responder porque ya busqué esto hace algún tiempo. Mi respuesta corta es: nunca he encontrado una manera de obtener el nivel de brillo actual cuando estoy en modo automático , después de una investigación exhaustiva.

Voy a romper esto en múltiples respuestas. No me saltearé las instalaciones, para que los usuarios de Google puedan encontrar esto útil. Salta lo que no necesites.

1- Obtener valor de ajuste de brillo

Cuando screenBrightness es menor que 0, me gustaría comenzar con el brillo de pantalla preferido. ¿Cómo puedo obtener este valor?

Para una persona que tiene esa reputación, estoy seguro de que ya conoce el ejercicio de la búsqueda. Hay toneladas de respuestas sobre esto aquí en SO. Solo revise el panel de la derecha con preguntas similares ... dicho esto, no detallaré mucho.

int oldBrightness = Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);

Así es como BrightnessPreference.java de Android lo hace en 2.3.5 (vea la línea 68). También es lo mismo (por razones prácticas) de lo publicado.

No se llama Brillo antiguo para nada. Esta es una configuración almacenada en algún lugar, no en el valor actual. Solo puede estar seguro de que es lo mismo que está experimentando el usuario si está en el modo de brillo manual. De lo contrario, simplemente no sabes. Usted debe comprobar:

int mode = Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);

2- Escuchar los cambios de brillo de la pantalla.

Como sabemos, en general, cuando queremos escuchar los cambios en Android, podemos intentar escuchar las acciones de Intent , registrar BroadcastReceiver y todo eso. Sin embargo, AFAIK , no hay ACTION_ para cambios de brillo, como SCREEN_[ON|OFF] , por ejemplo. Tal vez haya uno oculto en el sistema, pero nunca lo he visto, y si no está disponible públicamente, tienes todos los escollos posibles para lidiar con eso.

Hay un mensaje, con fecha de diciembre de 2010, de Dianne Hackborn, donde dice que "no hay transmisión para los cambios de brillo de la pantalla" .

Entonces, no creo que haya una manera de conectarnos con algo así. Por supuesto, puede cambiar la configuración en sí:

Settings.System.putInt(getContext().getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC);

3- Escuchar los cambios de luz ambiental.

Usted puede, sin embargo, aprox. Detectar la cantidad de luz. Necesita implements SensorEventListener y:

// class definition: private SensorManager sensorManager; @Override public void onSensorChanged(SensorEvent event) { float values = event.values[0]; // Ambient LUX } // onCreate: sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT), SensorManager.SENSOR_DELAY_UI);

4- Adivina el cambio de brillo.

Después de todo lo dicho, también debo repetir la pregunta de Hackborn: "¿qué estás tratando de lograr?" (esto es para el dueño de la recompensa). Me encantaría ver cómo Android asigna lux ambiental al brillo de la pantalla. Estoy bastante seguro de que no es una cosa lineal (map Sensor.getMaximumRange() linealmente al intervalo flotante de 0..1). He visto que, en general, se asigna logarítmicamente (proporciona ajustes más finos en el rango de brillo más bajo), pero no tengo idea de los parámetros. Quizás hay una forma predeterminada sugerida que todos usan, pero no soy un experto.

Si pudieras encontrar cómo lo hace Android al buscar el lugar en las fuentes donde lo hace, sería genial. Pero de todos modos, no vine todo el tiempo para dejarte con la misma pregunta. Lo que he encontrado es que Sensor.getMaximumRange() no es consistente con lo que obtienes de los values[0] SensorEvent values[0] . Aquí, tengo un sensor Sharp (Nexus S), y aunque el informe máximo es de 3.000, he visto valores de hasta 10.240.

Entonces, obtener el sensor no es confiable (?). Supongo, por el comportamiento que he visto usando Android, que de alguna manera asigna getMaximumValue () al brillo máximo, y cualquier valor por encima de eso simplemente no hace una diferencia.

5- ¿A dónde ir desde aquí?

Me gustaría ver más en las fuentes de Android. En algún lugar, probablemente en un nivel inferior, la gestión de hardware, podría ver cómo se mapean. Aún así, me pregunto si eso es confiable, considerando lo que dijo Dianne Hackborn (parece que no quieren que hagas eso). Supongo que tenían una razón para no exponer eso. Tal vez sea necesario: ¿por qué la aplicación debe conocer la configuración del sistema? O bien debe proporcionar su propio nivel de aplicación, o, en casos extremos, proporcionar su propio "método de cambio de sentido automático" (como en el punto 4 anterior) para un reemplazo de todo el sistema o el administrador. Quizás eso es lo que pensaron los desarrolladores originales.

De todos modos, si alguien encuentra otros detalles, me encantaría saberlo.