2013-09-24 17 views
7

Cercando di trovare un modo per rilevare M7 presente.Come rilevare se M7 è presente, a.k.a è un iPhone 5S o più recente?

È inutile interrogare la classe CMStepCounter o CMMotionActivity se M7 non è presente? La mia ipotesi è che su modelli non M7 con iOS 7.0, queste classi ottengano dati ma non in modo efficiente. & utilizzano molta più batteria.

Un modo greggio potrebbe essere:

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

Sui modelli non M7 (tranne il 5S) tali classi non sembrano ricevere dati. Richiedono il chip M7. Il controllo di istepCountingAvailable o isActivityAvailable come di seguito sembra funzionare. – Jackson

risposta

17

utilizzare le API fornite da 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 
} 

Naturalmente questa API è solo su iOS 7 o versione successiva. Quindi, se hai bisogno di supportare iOS 5 o 6, allora devi inserire questo codice in un controllo per la classe CMStepCounter.

+2

In realtà, non è necessario verificare esplicitamente le classi. Se utilizzi iOS 6 o versioni precedenti, [CMStepCounter isStepCountingAvailable] restituirà false in virtù del fatto che CMStepCounter sarà nullo. (lo stesso vale per [CMMotionActivityManager isActivityAvailable]) – clarkcox3

+1

CMStepCounter è stato sconsigliato in iOS 8. Viene utilizzato CMPedometer. [CMPedometer isStepCountingAvailable] funziona allo stesso modo del suo predecessore. Riferimento di classe: https://developer.apple.com/library/prerelease/ios/documentation/CoreMotion/Reference/CMPedometer_class/index.html –

Problemi correlati