2012-04-08 38 views
6

Tôi nhận thấy không có bất kỳ tài liệu công khai nào về việc sử dụng cảm biến ánh sáng, tuy nhiên các chương trình như ShadowBook ​​(shown here) có thể truy cập dữ liệu độ sáng và tôi đơn giản tự hỏi liệu có ai có thể đạt được kết quả tương tự và biết cách truy cập cảm biến này? Cảm ơn!Cảm biến môi trường xung quanh

Trả lời

7

Bạn có thể truy cập cảm biến ánh sáng bằng IOService, từ thư viện IOKit. Tên cho cảm biến ánh sáng là "AppleLMUController". Đây là một ví dụ tốt: light sensor. một cách đơn giản, có các dịch vụ như thế này: io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("AppleLMUController")); Sau đó, kết nối với các dịch vụ sử dụng:

io_connect_t port = 0; 
IOServiceOpen(service, mach_task_self(), 0, &port); 

Lấy mức độ ánh sáng sử dụng: IOConnectMethodScalarIScalarO(port, 0, 0, 2, &left, &right); đâu leftright là các số nguyên mà bây giờ giữ mức ánh sáng của cảm biến . Lưu ý rằng nhiều phương thức IOService trả về biến số kern_return_t, sẽ giữ KERN_SUCCESS, trừ khi phương thức thất bại. Ngoài ra, hãy chắc chắn để giải phóng đối tượng dịch vụ bằng cách sử dụng IOObjectRelease(service);

CHỈNH SỬA: Theo ý nghĩ thứ hai, IOConnectMethodScalarIScalarO() dường như không còn được dùng nữa. Thay vào đó, sử dụng:

uint32_t outputs = 2; 
uint64_t values[outputs]; 

IOConnectCallMethod(port, 0, nil, 0, nil, 0, values , &outputs, nil, 0); 

Các trái và phải giá trị này sẽ được lưu trữ trong values[0]values[1] tương ứng. Lưu ý rằng không phải tất cả MacBook đều hoạt động theo cách này: vào giữa năm 2010 15 '' chuyên nghiệp, cả hai giá trị đều giống nhau, vì cảm biến ánh sáng nằm trong camera iSight.

+0

Tôi làm cách nào để trả lại nhật ký cho các giá trị đó? 'NSLog (@" right% f ", values);'? Tôi định dạng trái/phải như thế nào? –

+0

một câu hỏi nhanh hơn có vẻ như được gọi một lần khi ứng dụng của tôi bắt đầu nhưng làm thế nào tôi có thể liên tục gọi nó? Đã cố gắng sử dụng bộ hẹn giờ để gọi lại phương thức nhưng không cập nhật giá trị –

+1

Để đăng nhập, các giá trị 'NSLog (@" Trái:% i, Phải:% i ", (int) [0], (int) [1]); 'sẽ là đủ. Tôi nghĩ rằng việc sử dụng 'giá trị' làm mảng sẽ khắc phục sự cố của bạn với những con số không cập nhật. Nếu không, tôi có thể gửi cho bạn một ví dụ nhanh mà tôi đã thực hiện. – wquist

Các vấn đề liên quan