注意:这个问题最初是在 Apple 在 iOS SDK 中引入运动检测硬件和相关 API 之前发布的。然而,这个问题的答案仍然相关。
我正在创建一个 iPhone iOS 应用程序,其中涉及跟踪用户的跑步和/或步行。用户跑步和步行的记录结果保持诚实是非常重要的。我需要一种方法来捕捉可能在使用汽车时作弊(或不小心打开跟踪器)的用户。
为了检查用户是否正在开车或骑车,我首先想到了这两个检查,但是两者都不能真正确定用户是否在车内(在一定程度上)。
通过以下方法检查用户当前的速度。如果用户的行驶速度超过 20 英里/小时,那么我可以假设用户在车里:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *recentLocation = [locations lastObject]; recentLocation.speed; //If speed is over 20 MPH, assume the user is not on their feet.
但是,我不确定这是否真的是一个很好的检查,因为人们被记录为比以前走得更快。这是一个很好的检查还是我应该使用其他东西?
使用Core Motion Framework提供的 Accelerometer 和 Motion API 确定用户加速的速度。如果用户加速超过一定速度,那么我可以假设用户正在乘车旅行。
这些假设是否正确?我想我真正的问题是:有没有更好的方法来检测用户是否在车辆中移动 - 如果是这样,如何?. 如果不是,那么这些检查是否适合这种情况,或者这只会让一些实际上那么快的用户感到恼火?CoreMotion 是否适合使用此 API?
编辑:新的 iPhone 5S M7 协处理器提供更准确的运动检测。谁能解释如何使用新的 M7 API?