2011-11-23 38 views
7

Có cách nào tốt hơn không?android phát hiện nếu đêm

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

Nó chỉ kiểm tra nếu giờ là từ 7 giờ tối đến 5 giờ sáng. Có cách nào khác để làm điều này?

+1

Vâng, bạn có thể sử dụng camera của điện thoại để đánh giá ánh sáng/bóng tối xung quanh, kết hợp với việc đo thời gian để GPS có được vị trí sửa chữa như là một gợi ý cho dù người dùng thực sự ở bên ngoài ... Không, tôi không nghiêm túc :) Một giải pháp đơn giản như hiện tại của bạn (thanh một số sửa lỗi rõ ràng, như sử dụng 'b oolean' và loại bỏ 'if') có nhiều khả năng là tốt nhất bạn có thể nhận được. – Xion

+1

Không có cách nào để phát hiện xem thiết bị hiện có ở chế độ NightMode không? Tôi thấy có một cách để thay đổi chế độ thiết bị nhưng tôi không thấy cách bạn có thể đọc chế độ hiện tại. http://developer.android.com/reference/android/app/UiModeManager.html – OlivierM

+0

Bạn có tìm thấy câu trả lời cho điều này không? Tôi đang cố giải quyết cùng một vấn đề. UiModeManager có vẻ không hữu ích lắm. –

Trả lời

5

Không phải là một sự khác biệt lớn, nhưng bạn có thể làm một bài tập:

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

Tôi hiện đang làm điều này, nhưng tôi nghĩ rằng nó quá không chính xác, đặc biệt là khi bạn tiếp cận các cực. Lý tưởng nhất, bạn cần phải kiểm tra giờ, vĩ độ và tháng (và có thể là bất kỳ quy tắc đặc biệt nào cho một số quốc gia nhất định). CHỈNH SỬA: Hoặc có mặc định cho mùa hè và mùa đông và cho phép người dùng điều chỉnh chúng. –

2

Nếu bạn đang sử dụng để cho phép UiModeManager CarMode và chế độ ban đêm được thiết lập để AUTO. Bạn có thể lấy một tham chiếu đến chủ đề hiện tại được sử dụng bằng cách khai báo một thuộc tính để tra cứu tại thời gian chạy.

attrs.xml

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

giá trị đêm /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

giá trị \ values.xml

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

giá trị đêm \ values.xml

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

Và Bây giờ, kiểm tra xem nó trên class.java của bạn của bạn

public boolean isNightMode(){ 
    return getResources().getBoolean(R.bool.isNightMode); 
} 
Các vấn đề liên quan