Android detectar si la noche
¿Hay una mejor manera que esto?
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 comprueba si la hora es entre las 7pm y las 5am. Hay alguna otra manera de hacer esto?
No es una gran diferencia, pero puedes hacer una asignación:
isNight = hour < 6 || hour > 18;
Si está utilizando UiModeManager para habilitar CarMode y el modo NIGHT se establece en AUTO. Puede obtener una referencia al tema actual utilizado al declarar un atributo para buscar en tiempo de ejecución.
Attrs.xml
<resources> <!-- Theme name reference --> <attr name="metaThemeName" format="string"/> </resources>
Valores-noche / temas.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); ...
Values \ values.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="isNightMode">false</bool> </resources>
Valores-noche \ valores.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="isNightMode">true</bool> </resources>
Y ahora, compruébalo en tu class.java
public boolean isNightMode(){ return getResources().getBoolean(R.bool.isNightMode); }