2011-11-23 48 views
7

有沒有比這更好的方法?安卓系統檢測是否有夜晚

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

它只是檢查小時是否在7pm到5am之間。有沒有其他方法可以做到這一點?

+1

嗯,你可以使用該設備的攝像頭,以評估周圍的亮度/黑暗度,並結合測量GPS獲取位置定位所需的時間作爲提示用戶是否真的在戶外......不,我不是認真的:)一個簡單的解決方案,就像你當前的一個(禁止一些明顯的修復,比如使用'b oolean'和擺脫'如果')最有可能是最好的,你可以得到。 – Xion

+1

沒有辦法檢測設備當前是否處於NightMode模式? 我看到有一種方法來改變設備模式,但我不知道如何讀取當前模式。 http://developer.android.com/reference/android/app/UiModeManager.html – OlivierM

+0

你找到了這個答案嗎?我正試圖解決同樣的問題。 UiModeManager似乎不是很有幫助。 –

回答

5

的差別不是很大,但可以進行分配:如果您使用UiModeManager使CarMode模式和夜間模式設置爲AUTO

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

我目前正在這樣做,但我認爲這太不準確了,特別是當你接近極點時。理想情況下,您需要查看小時,緯度和月份(可能還有某些特定國家/地區的特殊規則)。 編輯:或者有夏季和冬季的默認設置,並讓用戶調整它們。 –

2

。您可以通過聲明屬性在運行時查找來獲取當前主題的引用。

attrs.xml

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

值晚 /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

\ values.xml

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

值晚 \ values.xml

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

而現在,檢查一下你對自己class.java

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