2013-09-24 3 views
7

Попытка найти способ обнаружения присутствия M7.Как определить, присутствует ли M7, a.k.a это iPhone 5S или новее?

Бесполезно ли запрашивать класс CMStepCounter или CMMotionActivity, если M7 отсутствует? Я предполагаю, что на моделях без M7, имеющих iOS 7.0, эти классы получают данные, но не так эффективно & используют намного больше батареи.

Сырой путь будет:

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

На моделях без M7 (ничего, кроме 5S) эти классы, похоже, не получают данных. Они требуют микросхемы M7. Проверка работы isStepCountingAvailable или isActivityAvailable, как показано ниже, работает. – Jackson

ответ

17

Используйте API-интерфейсы, которые Apple, обеспечивает:

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 
} 

Конечно, этот API только на прошивке 7 или более поздней версии. Поэтому, если вам нужно поддерживать iOS 5 или 6, вам необходимо обернуть этот код в чеке для класса CMStepCounter.

+2

На самом деле вам не нужно явно проверять классы. Если вы на iOS 6 или раньше, [CMStepCounter isStepCountingAvailable] вернет false из-за того, что CMStepCounter будет равен нулю. (то же самое для [CMMotionActivityManager isActivityAvailable]) – clarkcox3

+1

CMStepCounter устарел в iOS 8. Вместо этого используется CMPedometer. [CMPedometer isStepCountingAvailable] работает так же, как и его предшественник. Ссылка на класс: https://developer.apple.com/library/prerelease/ios/documentation/CoreMotion/Reference/CMPedometer_class/index.html –

Смежные вопросы