Sam*_*cer 33 objective-c core-location ios core-motion apple-m7
注意:此问题最初是在Apple在iOS SDK中引入运动检测硬件和相关API之前发布的.然而,这个问题的答案仍然有用.
我正在创建一个iPhone iOS应用程序,它涉及跟踪用户的跑步和/或步行.用户跑步和走路的记录结果保持诚实非常重要.我需要一种方法来捕捉可能在使用汽车时作弊(或意外地离开跟踪器)的用户.
要检查如果用户驾驶或乘坐一辆车我首先想到这两项检查,但也不能真正确定该用户是在汽车或没有(一个点).
使用以下方法检查用户的当前速度.如果用户的行进速度超过20-ahh MPH,那么我可以假设用户在车内:
- (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.
Run Code Online (Sandbox Code Playgroud)
但是,我不确定这是否真的是一个很好的检查,因为人们的记录比以前更快.这是一个很好的检查还是我应该使用其他东西?
使用Core Motion Framework提供的Accelerometer和Motion API确定用户加速的速度.如果用户加速超过一定的速率,那么我可以假设用户正在车辆中行驶.
这些假设是否正确?我想我真正的问题是:有没有更好的方法来检测用户是否在车内移动 - 如果是这样的话?.如果没有,那么这些检查是否适用于这种情况,或者这对那些实际上那么快的用户来说是否会烦恼?CoreMotion是适当的API吗?
编辑:新的iPhone 5S M7协处理器提供更准确的运动检测.任何人都可以解释如何使用新的M7 API吗?
ric*_*ter 30
关于从位置数据猜测运动状态的智慧(或缺乏智慧)的所有建议仍然适用.但关于Core Motion和M7的更新......
是的,您可以在具有M7,M8,M9等运动协处理器(*)的设备上使用Core Motion来指示用户是否可能正在驾驶.
CMMotionActivityManager
对象(在使用其类方法isActivityAvailable
确定您是否具有M7(+)功能之后),并启动活动更新或查询最近的活动.CMMotionActivity
对象的automotive
属性,以查看iOS是否认为用户是/在汽车中.然而,就像GPS的推论一样,你仍然应该把这些信息带入盐中.CoreMotion API为您提供iOS对用户活动的最佳猜测,但不能保证100%准确.(例如,我不确定乘坐火车是否可以算作automotive
.另请注意,不同的活动类型并不相互排斥.)您的应用最好检查您感兴趣的活动类型而不是尝试排除你不想要的.
(*)M7设备是带有A7 SoC的设备:iPhone 5s,iPad Air,iPad mini 2. M8是A8,M9是A9等.简而言之,自2013年秋季以来推出的每款iOS设备都不包括iPhone 5c.
art*_*dev 14
您可以使用此简单库来检测用户是在步行,跑步,在车上还是不在移动.
适用于所有iOS设备,无需M7芯片.
https://github.com/SocialObjects-Software/SOMotionDetector
在回购中,您可以找到演示项目
归档时间: |
|
查看次数: |
32357 次 |
最近记录: |