2011-11-23 15 views
7

C'è un modo migliore di questo?android rilevare se notte

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

Controlla solo se l'ora è tra 7pm e 5am. C'è un altro modo di fare questo?

+1

Beh, è ​​possibile utilizzare la fotocamera del dispositivo per valutare la leggerezza/oscurità dell'ambiente circostante, in combinazione con la misurazione del tempo necessario per il GPS per ottenere una posizione fissa come suggerimento se l'utente è effettivamente al di fuori ... No, non sto facendo sul serio :) Una soluzione semplice come quella attuale (salvo alcune correzioni ovvie, come usare 'b oolean' e sbarazzarsi di 'if') è molto probabilmente il meglio che si possa ottenere. – Xion

+1

Non c'è un modo per rilevare se il dispositivo è attualmente in NightMode? Vedo che c'è un modo per cambiare la modalità del dispositivo ma non vedo come è possibile leggere la modalità corrente. http://developer.android.com/reference/android/app/UiModeManager.html – OlivierM

+0

Hai trovato una risposta per questo? Sto cercando di risolvere lo stesso problema. UiModeManager non sembra essere molto utile. –

risposta

5

Non è una grande differenza, ma si può fare un compito:

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

Attualmente lo sto facendo, ma penso che sia troppo impreciso, specialmente quando ti avvicini ai poli. Idealmente, è necessario controllare ore, latitudine e mesi (e eventualmente eventuali regole speciali per alcuni paesi). MODIFICA: O hanno i valori predefiniti per l'estate e l'inverno e consentono all'utente di regolarli. –

2

Se si utilizza UiModeManager per consentire CarMode e modalità NOTTE è impostato su Auto. È possibile ottenere un riferimento al tema corrente utilizzato dichiarando un attributo per cercare in fase di runtime.

attrs.xml

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

valori-notte /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

valori \ values.xml

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

valori-notte \ values.xml

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

Ed ora, controllare sul vostro class.java

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