2011-11-23 2 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; 
} 

時間が午後7時から午前5時の間であるかどうかをチェックするだけです。これを行うための他の方法はありますか?

+1

まあ上でそれをチェック明度/周囲の暗さと組み合わせて、GPSが実際に外出しているかどうかをヒントとしてGPSを取得するのにかかる時間を測定する...いいえ、私は深刻ではありません:)あなたの現在のもの'bを使うようないくつかの明白な修正あなたが得ることができる最高の可能性があります。 – Xion

+1

デバイスが現在ナイトモードにあるかどうかを検出する方法はありませんか? デバイスモードを変更する方法がありますが、私は現在のモードをどのように読むことができないのか分かりません。 http://developer.android.com/reference/android/app/UiModeManager.html – OlivierM

+0

あなたは、このための答えを見つけましたか?私は同じ問題を解決しようとしています。 UiModeManagerはあまり役に立ちません。 –

答えて

5

ない大きな違いがありますが、譲渡することができます:あなたはCarModeを有効にするためにUiModeManagerを使用していて、NIGHTモードがAUTOに設定されている場合は

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

私は現在これをやっていますが、それはあまりにも不正確だと思います、特にあなたが極に近づくにつれて。理想的には、時間、緯度および月(および場合によっては特定の国の特別ルール)を確認する必要があります。 EDIT:夏と冬のデフォルトを持っており、ユーザーはおそらくそれらを調整してみましょうか。 –

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); 
} 
関連する問題