M7/M8 チップの MotionActivity を、歩数のカウントなど、さまざまな方法で使用しています。歩数のカウントについては、その日の歩数を照会し、リアルタイムで発生する歩数を継続的にリクエストします。
現在、これを行う前に、このコードに進む前に[CMStepCounter isStepCountingAvailable]とローカル オーバーライド フラグを確認しています。motionActivity の承認が付与されていない場合、isStepCountingAvailable は FALSE を返すと想定しました。これは事実ではないようで、ハードウェア検出のみのようです。これに対して承認が付与されたかどうかを検出する他の方法が見つからないようです。
つまり、startStepCountingUpdatesToQueue と queryStepCountStartingFrom の両方が実行され、ブロックが返されますが、常にエラー コードが返されます。特に CMErrorDomain コード 105。
motionActivity が承認されていないかどうかを判断するためのより良い方法はありますか? フォールバック コードはいくつかありますが、return ブロックのエラー コードではなく、事前にブール値チェックを行いたいと思います。
if (self.useM7IfAvailable && [CMStepCounter isStepCountingAvailable]){
self.cmStepCounter = [[CMStepCounter alloc] init];
[self.cmStepCounter startStepCountingUpdatesToQueue:self.operationQueue updateOn:1.0 withHandler:^(NSInteger numberOfSteps, NSDate *timestamp, NSError *error){
if(!error){
// do something with numberOfSteps
} else {
// not authorized: CMErrorDomain code 105
}
}];
}
[self.cmStepCounter queryStepCountStartingFrom:dayStart to:dayEnd toQueue:_operationQueue withHandler:^(NSInteger numberOfSteps, NSError *error) {
if(!error){
// do something with numberOfSteps
} else {
// not authorized: CMErrorDomain code 105
}
}];