2013-09-24 26 views
7

Cố gắng tìm cách phát hiện M7 có mặt.Làm thế nào để phát hiện nếu M7 là hiện nay, a.k.a nó là một iPhone 5S hoặc mới hơn?

Có vô nghĩa khi truy vấn lớp CMStepCounter hoặc CMMotionActivity nếu M7 không có mặt không? Tôi đoán là trên các mô hình không phải M7 có iOS 7.0, các lớp này nhận được dữ liệu nhưng không hiệu quả như vậy & sử dụng nhiều pin hơn.

Một cách thô sẽ là:

struct utsname systemInfo; 

uname(&systemInfo); 

model = [[NSString alloc] initWithCString:systemInfo.machine 
             encoding:NSUTF8StringEncoding]; 

version = [[NSString alloc] initWithString:[[UIDevice currentDevice] systemVersion]]; 


if ([model compare:@"iPhone6,1"]) { 

} 
+0

Trên các mô hình không phải M7 (bất cứ thứ gì trừ 5S), các lớp đó dường như không nhận dữ liệu. Họ yêu cầu chip M7. Kiểm tra isStepCountingAvailable hoặc isActivityAvailable như dưới đây có vẻ hoạt động. – Jackson

Trả lời

17

Sử dụng các API mà Apple cung cấp:

if ([CMStepCounter isStepCountingAvailable]) { 
    // The device supports step counting 
} else { 
    // The device does not support step counting 
} 

if ([CMMotionActivityManager isActivityAvailable]) { 
    // You can use CMMotionActivity 
} else { 
    // Nope, not supported 
} 

Tất nhiên API này là chỉ trên iOS 7 trở lên. Vì vậy, nếu bạn cần hỗ trợ iOS 5 hoặc 6 thì bạn cần phải quấn mã này trong một kiểm tra cho lớp CMStepCounter.

+2

Thực ra, bạn không cần phải kiểm tra rõ ràng các lớp học. Nếu bạn đang sử dụng iOS 6 hoặc trước đó, [CMStepCounter isStepCountingAvailable] sẽ trả về false do thực tế CMStepCounter sẽ không phải là số không. (tương tự cho [CMMotionActivityManager isActivityAvailable]) – clarkcox3

+1

CMStepCounter không được dùng trong iOS 8. CMPedometer được sử dụng thay thế. [CMPedometer isStepCountingAvailable] hoạt động giống như người tiền nhiệm của nó. Tham chiếu lớp học: https://developer.apple.com/library/prerelease/ios/documentation/CoreMotion/Reference/CMPedometer_class/index.html –

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