2011-11-23 22 views
7

¿Hay una mejor manera que esto?android detectar si la noche

Boolean isNight; 
Calendar cal = Calendar.getInstance(); 
int hour = cal.get(Calendar.HOUR_OF_DAY); 
if(hour < 6 || hour > 18){ 
    isNight = true; 
} else { 
    isNight = false; 
} 

sólo chequea si horas es 7 p.m.-05 a.m.. Hay alguna otra manera de hacer esto?

+1

Bueno, se podría usar la cámara del dispositivo para evaluar la claridad/oscuridad del entorno, combinado con la medición del tiempo que le toma al GPS obtener una corrección de ubicación como una pista sobre si el usuario está realmente afuera ... No, no estoy hablando en serio :) Una solución simple como la actual (barra algunos arreglos obvios, como usar 'b oolean' y deshacerse de 'if') es lo más probable que pueda obtener. – Xion

+1

¿No hay una forma de detectar si el dispositivo está actualmente en modo nocturno? Veo que hay una manera de cambiar el modo del dispositivo, pero no veo cómo se puede leer el modo actual. http://developer.android.com/reference/android/app/UiModeManager.html – OlivierM

+0

¿Encontró una respuesta para esto? Estoy tratando de resolver el mismo problema. UiModeManager no parece ser muy útil. –

Respuesta

5
No

una gran diferencia, pero se puede hacer una asignación:

isNight = hour < 6 || hour > 18; 
+0

Actualmente lo estoy haciendo así, pero creo que es demasiado impreciso, especialmente cuando te acercas a los polos. Idealmente, debe verificar las horas, la latitud y los meses (y posiblemente cualquier regla especial para ciertos países). EDITAR: O tienen los valores predeterminados para el verano y el invierno, y que el usuario los ajuste tal vez. –

2

Si está utilizando UiModeManager para permitir CarMode y el modo NOCHE se define en AUTO. Puede obtener una referencia al tema actual utilizado al declarar un atributo para buscar en el tiempo de ejecución.

attrs.xml

<resources> 
    <!-- Theme name reference --> 
    <attr name="metaThemeName" format="string"/> 
</resources> 

valores-noche /themes.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools"> 
    <!-- Application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat"> 
     <item name="metaThemeName">night</item> 
    </style> 
</resources> 

java.class

... 
    TypedValue outValue = new TypedValue(); 
    getTheme().resolveAttribute(R.attr.metaThemeName, outValue, true); 
    boolean isNight="night".equals(outValue.string); 
... 
0

valores \ values.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="isNightMode">false</bool> 
</resources> 

valores-noche \ values.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="isNightMode">true</bool> 
</resources> 

y ahora, comprobar que en su class.java su

public boolean isNightMode(){ 
    return getResources().getBoolean(R.bool.isNightMode); 
} 
Cuestiones relacionadas