2013-09-24 20 views
7

Próba znalezienia sposobu wykrywania obecności M7.Jak wykryć obecność M7, a.k.a czy jest to iPhone 5S lub nowszy?

Czy nie ma sensu zapytanie do klasy CMStepCounter lub CMMotionActivity, jeśli nie ma M7? Domyślam się, że na modelach innych niż M7 mających iOS 7.0 te klasy uzyskują dane, ale nie tak skutecznie & zużywają o wiele więcej baterii.

Surowy sposób byłoby:

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

W modelach innych niż M7 (oprócz 5S) te klasy nie wydają się otrzymywać danych. Wymagają układu M7. Sprawdzanie wartości isStepCountingAvailable lub isActivityAvailable jak poniżej wydaje się działać. – Jackson

Odpowiedz

17

pomocą API, że Apple zapewnia:

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 
} 

Oczywiście ta API jest tylko na iOS 7 lub nowszej. Jeśli więc potrzebujesz obsługi systemu iOS 5 lub 6, musisz również zawinąć ten kod w sprawdzanie dla klasy CMStepCounter.

+2

W rzeczywistości nie trzeba jawnie sprawdzać klas. Jeśli korzystasz z systemu iOS 6 lub wcześniej, funkcja [CMStepCounter isStepCountingAvailable] zwróci wartość false z powodu braku wartości CMStepCounter. (to samo dotyczy [CMMotionActivityManager isActivityAvailable]) – clarkcox3

+1

CMStepCounter został wycofany w iOS 8. Zamiast niego używany jest CMPedometer. [CMPedometer isStepCountingAvailable] działa tak samo jak jego poprzednik. Numer referencyjny klasy: https://developer.apple.com/library/prerelease/ios/documentation/CoreMotion/Reference/CMPedometer_class/index.html –