2013-09-24 4 views
7

M7を検出する方法を見つけようとしています。M7が存在するかどうかを検出する方法、a.k.a iPhone 5S以降ですか?

M7が存在しない場合、CMStepCounterまたはCMMotionActivityクラスをクエリするのは意味がありませんか?私の推測では、iOS 7.0を搭載した非M7モデルでは、これらのクラスはデータを取得しますが、それほど効率的ではありません。&はもっとバッテリーを使います。

粗製の方法は次のようになります。このAPIは唯一のiOS 7以降である。もちろん、

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 
} 

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

は、Appleが提供するAPIを使用してください。したがって、iOS 5または6をサポートする必要がある場合は、CMStepCounterクラスのチェックでこのコードをラップする必要があります。

+2

実際に、クラスを明示的にチェックする必要はありません。 iOS 6以前であれば、[CMStepCounter isStepCountingAvailable]は、CMStepCounterがゼロになるという事実によってfalseを返します。 ([CMMotionActivityManager isActivityAvailable]も同じです) – clarkcox3

+1

CMStepCounterは、iOS 8では廃止されました。代わりに、CMPedometerが使用されます。 [CMPedometer isStepCountingAvailable]は、前任者と同じように機能します。クラスリファレンス:https://developer.apple.com/library/prerelease/ios/documentation/CoreMotion/Reference/CMPedometer_class/index.html –

関連する問題