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); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.