跑步ios手机ios app源代码码

当前位置: &
> 安踏跑步ios版下载
安踏跑步ios版(运动跑步软件) v1.0.9 苹果官方版
安踏的鞋咱买了,是不是该去跑步了,用安踏跑步ios版吧!这个运动跑步软件中你可以添加自己的跑鞋,查询每一双鞋每一次跑步的距离,时间、轨迹等,安踏跑步ios版让你运动更有效果,需要的亲们就赶紧带回去使用吧!安踏跑步ios版特色:跑姿分析:自主研发,通过芯片与算法,科学测试您的跑姿,如足内外翻、着地方式、步幅、受力大小、足部起伏、着地时间细分等;精准监控:通过芯片记录,自主研发相关算法,提升距离、配速、卡路里等常见数据的准确性;PK模式,一较高低:可以建立PK房,邀请好友加入,规定时间内进行高抬腿极限PK,集训练与娱乐于一体,激励你不断争锋;跑程记录:可以查询轨迹、距离、时间、配速、卡路里等历史数据,回顾你跑过的每一步;我的跑鞋:添加自己跑鞋,查询每一双鞋每一次跑步的距离、时间、轨迹等,记录每双跑鞋伴你进步的过程;音乐相伴:跑步过程可以直接在APP里播放本地音乐或者网上流行音乐,助你动力加倍。社交分享:分享跑步记录,交流跑步心得,前进路上你并不孤独,无论你是新晋跑者还是资深跑友,只要你热爱跑步,这里就是你的社区!
健康类app下载排行榜
也许生活中我们太重视物质而忽略了健康,那么在科技发展的今天,一部手机就可以成为你的保健医生,健康类app下载排行榜可以来关注下,这里提供的随时更新的手机医疗健康软件...
安踏跑步ios版下载
高速下载器通道
其他下载地址
下载不了?
9.4MB | 简体中文 | 0分
想每天运动拥有好身材吗?茄子运动iPhone版是您的运动管理专家。茄...
46.2MB | 简体中文 | 0分
记得高考的时候我们都会在早上几何跑两圈,但现在感觉都变懒了,而...
36MB | 简体中文 | 0分
橄榄球是一项非常可怕的运动,运动员很容易受伤,所以这种关键时刻...
254MB | 简体中文 | 0分
孩子的教育问题值得大家的关注,我们的宝宝运动会iOS版就是其中之一...
168MB | 简体中文 | 0分
操控赛车在足球坠落之前将他推进对方的球门,撞头运动车iPhone版的...
63.4 MB | 简体中文 | 0分
点点运动IOS版是一款专业的运动健身减肥APP,通过点点运动IOS版用户...
下载排行榜当前位置:
更新时间:
软件大小:19.30MB
软件类型:国产软件
软件语言:简体
软件授权:免费软件
软件分类:
支持系统:
嗨跑步ios的最新版本现已提供下载服务。嗨跑步ios是一款运动记录软件,可帮助用户记录跑步,骑行,走路三种运动每次跑步数、时间、距离、卡路里以及周报月报等,嗨跑步app让你随时掌握你的运动状态。您也可以直接通过手机访问进行下载安装。功能介绍  - 跑步,骑行,走路三种运动方式随时切换  - 提供精准的户外运动定位功能,记录运动轨迹,随时回放运动路线  - 实时记录当天步数,并直观的将一周的步数用图标显示出来  - 提供准确的天气预报功能,让运动计划不被突如其来的天气打乱软件特色  适用范围  a) 在您注册 嗨跑步 帐号时,您根据 嗨跑步 要求提供的个人注册信息(商家应法律法规要求需公示的企业名称及相关工商注册信息除外);  b) 在您使用 嗨跑步 网络服务,或访问 嗨跑步 平台网页时,嗨跑步 自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据;  c) 嗨跑步 通过合法途径从商业伙伴处取得的用户个人数据。  您了解并同意,以下信息不适用本隐私权政策:  a) 您在使用 嗨跑步 平台提供的搜索服务时输入的关键字信息;  b) 嗨跑步 收集到的您在 嗨跑步 发布的有关信息数据,包括但不限于参与活动、成交信息及评价详情;  c) 违反法律规定或违反 嗨跑步 规则行为及 嗨跑步 已对您采取的措施。  信息使用  a) 嗨跑步 不会向任何无关第三方提供、出售、出租、分享或交易您的个人信息,除非事先得到您的许可,或该第三方和 嗨跑步(含 嗨跑步 关联公司)单独或共同为您提供服务,且在该服务结束后,其将被禁止访问包括其以前能够访问的所有这些资料。  b) 嗨跑步 亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。任何 嗨跑步 平台用户如从事上述活动,一经发现,嗨跑步 有权立即终止与该用户的服务协议。  c) 为服务用户的目的,嗨跑步 可能通过使用您的个人信息,向您提供您感兴趣的信息,包括但不限于向您发出产品和服务信息,或者与 嗨跑步 合作伙伴共享信息以便他们向您发送有关其产品和服务的信息(后者需要您的事先同意)。  信息披露  在如下情况下,嗨跑步 将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息:  a) 经您事先同意,向第三方披露;  b) 为提供您所要求的产品和服务,而必须和第三方分享您的个人信息;  c) 根据法律的有关规定,或者行政或司法机构的要求,向第三方或者行政、司法机构披露;  d) 如您出现违反中国有关法律、法规或者 嗨跑步 服务协议或相关规则的情况,需要向第三方披露;  e) 如您是适格的知识产权投诉人并已提起投诉,应被投诉人要求,向被投诉人披露,以便双方处理可能的权利纠纷;  f) 在 嗨跑步 平台上创建的某一交易中,如交易任何一方履行或部分履行了交易义务并提出信息披露请求的,嗨跑步 有权决定向该用户提供其交易对方的联络方式等必要信息,以促成交易的完成或纠纷的解决。  g) 其它 嗨跑步 根据法律、法规或者网站政策认为合适的披露。  信息存储和交换  嗨跑步 收集的有关您的信息和资料将保存在 嗨跑步 及(或)其关联公司的服务器上,这些信息和资料可能传送至您所在国家、地区或 嗨跑步 收集信息和资料所在地的境外并在境外被访问、存储和展示。
嗨跑步ios下载地址
iphone版下载
嗨跑步ios相关版本
下载之家是国内最值得信赖的官方软件下载资源提供商,提供安全无毒的绿色软件下载、手机软件下载、游戏下载等。高速安全的软件下载尽在下载之家!
Copyright &
下载之家 (http://www.downza.cn). All Rights Reserved.iOS 实时计步功能的简单实现 - 简书
iOS 实时计步功能的简单实现
今天就和大家聊一聊iOS中计步功能的实现。为什么会突然想到实现这个功能呢?,哎,都是泪呀。 之前面试期间有家公司就是做计步功能的。问我如何实现?然而在我印象中直接调用HealthKit框架获取苹果的健康应用数据不就行了。。。
然后Boss说这样非常容易作弊。
所以不打算采用这样的方式。
于是乎,话音刚落。就被Boss反问一句:“那如果不让你用HealthKit框架呢?”
我:“啊,这样啊。。。我也不知道”
Boss:“......(此处你们懂得)”
首先iOS中的计步功能,比较普遍的应该有两种方式:
非常直接了当一种方式,直接调用系统的健康数据,基于HealthKit框架的,但是貌似是一小时更新一次数据。如果要实时获取步数,这种方式并不是最佳。
这种例子已经有很多了。就不再贴此代码了。
基于CoreMotion框架,本人也是才疏学浅,了解的并不多。大家可以看下这个框架中一些常见的其他应用场景
本文重点介绍的一种方式:加速度传感器
运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
最早出现在iOS设备上的传感器之一
加速计用于检测设备在X、Y、Z轴上的加速度 (哪个方向有力的作用)
加速计可以用于检测设备的摇晃,经典应用场景
如果有对传感器很陌生,想要普及下的童鞋,下面链接会帮到你
传感器的类型
运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
环境光传感器(Ambient Light Sensor)
距离传感器(Proximity Sensor)
磁力计传感器(Magnetometer Sensor)
内部温度传感器(Internal Temperature Sensor)
湿度传感器(Moisture Sensor)
陀螺仪(Gyroscope)
下面是实现代码,因为要实时计步,就写成了单例
StepManager.h
#import &Foundation/Foundation.h&
#import &UIKit/UIKit.h&
@interface StepManager : NSObject
@property (nonatomic) NSI
// 运动步数(总计)
+ (StepManager *)sharedM
//开始计步
- (void)startWithS
//得到计步所消耗的卡路里
//+ (NSInteger)getStepC
//得到所走的路程(单位:米)
//+ (CGFloat)getStepD
//得到运动所用的时间
//+ (NSInteger)getStepT
StepManager.m
#import "StepManager.h"
#import "StepModel.h"
#import &CoreMotion/CoreMotion.h&
// 计步器开始计步时间(秒)
#define ACCELERO_START_TIME 2
// 计步器开始计步步数(步)
#define ACCELERO_START_STEP 100
// 数据库存储步数采集间隔(步)
#define DB_STEP_INTERVAL 1
@interface StepManager ()
NSMutableArray *arrA
// 加速度传感器采集的原始数组
int record_no_
int record_
NSDate *lastD
@property (nonatomic) NSInteger startS
// 计步器开始步数
@property (nonatomic, retain) NSMutableArray *arrS
// 步数数组
@property (nonatomic, retain) NSMutableArray *arrStepsS
// 数据库纪录步数数组
@property (nonatomic) CGFloat gpsD
// GPS轨迹的移动距离(总计)
@property (nonatomic) CGFloat agoGpsD
// GPS轨迹的移动距离(之前)
@property (nonatomic) CGFloat agoActionD
// 实际运动的移动距离(之前)
@property (nonatomic, retain) NSString *actionId;
// 运动识别ID
@property (nonatomic) CGF
// 运动里程(总计)
@property (nonatomic) NSI
// 消耗卡路里(总计)
@property (nonatomic) NSI
// 运动用时(总计)
@implementation StepManager
static StepManager *sharedM
static CMMotionManager *motionM
+ (StepManager *)sharedManager
@synchronized (self) {
if (!sharedManager) {
sharedManager = [[StepManager alloc]init];
motionManager = [[CMMotionManager alloc]init];
return sharedM
//开始计步
- (void)startWithStep
if (!motionManager.isAccelerometerAvailable) {
NSLog(@"加速度传感器不可用");
motionManager.accelerometerUpdateInterval = 1.0/40;
[self startAccelerometer];
- (void)startAccelerometer
@try 。。。@catch 。。。
@try 后面跟或许会出现异常的程序,代码块
当@try抛出异常时 系统会进行异常捕捉
具体可以了解下 NSException 异常类
@catch 在这里处理 程序所抛出的异常
//如果不支持陀螺仪,需要用加速传感器来采集数据
if (!motionManager.isAccelerometerActive) {//
isAccelerometerAvailable方法用来查看加速度器的状态:是否Active(启动)。
// 加速度传感器采集的原始数组
if (arrAll == nil) {
arrAll = [[NSMutableArray alloc] init];
[arrAll removeAllObjects];
1.push方式
这种方式,是实时获取到Accelerometer的数据,并且用相应的队列来显示。即主动获取加速计的数据。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error){
if (!motionManager.isAccelerometerActive) {
//三个方向加速度值
double x = accelerometerData.acceleration.x;
double y = accelerometerData.acceleration.y;
double z = accelerometerData.acceleration.z;
//g是一个double值 ,根据它的大小来判断是否计为1步.
double g = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2)) - 1;
//将信息保存在步数模型中
StepModel *stepsAll = [[StepModel alloc] init];
stepsAll.date = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init] ;
df.dateFormat
= @"yyyy-MM-dd HH:mm:ss";
NSString *strYmd = [df stringFromDate:stepsAll.date];
stepsAll.record_time =strY
stepsAll.g =
// 加速度传感器采集的原始数组
[arrAll addObject:stepsAll];
// 每采集10条,大约1.2秒的数据时,进行分析
if (arrAll.count == 10) {
// 步数缓存数组
NSMutableArray *arrBuffer = [[NSMutableArray alloc] init];
arrBuffer = [arrAll copy];
[arrAll removeAllObjects];
// 踩点数组
NSMutableArray *arrCaiDian = [[NSMutableArray alloc] init];
//遍历步数缓存数组
for (int i = 1; i & arrBuffer.count - 2; i++) {
//如果数组个数大于3,继续,否则跳出循环,用连续的三个点,要判断其振幅是否一样,如果一样,然并卵
if (![arrBuffer objectAtIndex:i-1] || ![arrBuffer objectAtIndex:i] || ![arrBuffer objectAtIndex:i+1])
StepModel *bufferPrevious = (StepModel *)[arrBuffer objectAtIndex:i-1];
StepModel *bufferCurrent = (StepModel *)[arrBuffer objectAtIndex:i];
StepModel *bufferNext = (StepModel *)[arrBuffer objectAtIndex:i+1];
//控制震动幅度,,,,,,根据震动幅度让其加入踩点数组,
if (bufferCurrent.g & -0.12 && bufferCurrent.g & bufferPrevious.g && bufferCurrent.g & bufferNext.g) {
[arrCaiDian addObject:bufferCurrent];
//如果没有步数数组,初始化
if (nil == self.arrSteps) {
self.arrSteps = [[NSMutableArray alloc] init];
self.arrStepsSave = [[NSMutableArray alloc] init];
// 踩点过滤
for (int j = 0; j & arrCaiDian. j++) {
StepModel *caidianCurrent = (StepModel *)[arrCaiDian objectAtIndex:j];
//如果之前的步数为0,则重新开始记录
if (self.arrSteps.count == 0) {
//上次记录的时间
lastDate = caidianCurrent.
// 重新开始时,纪录No初始化
record_no = 1;
record_no_save = 1;
// 运动识别号
NSTimeInterval interval = [caidianCurrent.date timeIntervalSince1970];
NSNumber *numInter = [[NSNumber alloc] initWithDouble:interval*1000];
long long llInter = numInter.longLongV
//运动识别id
self.actionId = [NSString stringWithFormat:@"%lld",llInter];
self.distance = 0.00f;
self.second = 0;
self.calorie = 0;
self.step = 0;
self.gpsDistance = 0.00f;
self.agoGpsDistance = 0.00f;
self.agoActionDistance = 0.00f;
caidianCurrent.record_no = record_
caidianCurrent.step = (int)self.
[self.arrSteps addObject:caidianCurrent];
[self.arrStepsSave addObject:caidianCurrent];
int intervalCaidian = [caidianCurrent.date timeIntervalSinceDate:lastDate] * 1000;
// 步行最大每秒2.5步,跑步最大每秒3.5步,超过此范围,数据有可能丢失
int min = 259;
if (intervalCaidian &= min) {
if (motionManager.isAccelerometerActive) {
//存一下时间
lastDate = caidianCurrent.
if (intervalCaidian &= ACCELERO_START_TIME * 1000) {// 计步器开始计步时间(秒)
self.startStep = 0;
if (self.startStep & ACCELERO_START_STEP) {//计步器开始计步步数 (步)
self.startStep ++;
else if (self.startStep == ACCELERO_START_STEP) {
self.startStep ++;
// 计步器开始步数
// 运动步数(总计)
self.step = self.step + self.startS
self.step ++;
//步数在这里
NSLog(@"步数%ld",self.step);
int intervalMillSecond = [caidianCurrent.date timeIntervalSinceDate:[[self.arrSteps lastObject] date]] * 1000;
if (intervalMillSecond &= 1000) {
record_no++;
caidianCurrent.record_no = record_
caidianCurrent.step = (int)self.
[self.arrSteps addObject:caidianCurrent];
// 每隔100步保存一条数据(将来插入DB用)
StepModel *arrStepsSaveVHSSteps = (StepModel *)[self.arrStepsSave lastObject];
int intervalStep = caidianCurrent.step - arrStepsSaveVHSSteps.
// DB_STEP_INTERVAL 数据库存储步数采集间隔(步) 100步
if (self.arrStepsSave.count == 1 || intervalStep &= DB_STEP_INTERVAL) {
//保存次数
record_no_save++;
caidianCurrent.record_no = record_no_
[self.arrStepsSave addObject:caidianCurrent];
NSLog(@"---***%ld",self.step);
// 备份当前运动数据至文件中,以备APP异常退出时数据也不会丢失
// [self bkRunningData];
// 运动提醒检查
// [self checkActionAlarm];
}@catch (NSException * e) {
NSLog(@"Exception: %@", e);
////得到计步所消耗的卡路里
//+ (NSInteger)getStepCalorie
在这里原谅我并没有对其实现。本以为卡路里和步数的换算单位,一个公式就可以了。不查不知道,一查吓一跳原来还和其他众多因素有关:走路的快慢,步子的大小,体重的大小等等有关。。。笔者已吓尿,还是找算法大牛吧。
////得到所走的路程(单位:米)
//+ (CGFloat)getStepDistance
////得到运动所用的时间
//+ (NSInteger)getStepTime
其次是外部调用
#import "ViewController.h"
#import "StepManager.h"
@interface ViewController ()
NSTimer *_
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[StepManager sharedManager] startWithStep];
lable =[[ UILabel alloc]initWithFrame:CGRectMake(100, 300, 300, 40)];
[self.view addSubview:lable];
_timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(getStepNumber) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];
- (void)getStepNumber
lable.text = [NSString stringWithFormat:@"我走了
%ld步",[StepManager sharedManager].step];
另外还需要注意的一点是,因为我们要实时计步所以,当我们应用程序在后台的时候仍然需要计步,所以要做一些处理
AppDelegate.m
- (void)applicationDidEnterBackground:(UIApplication *)application {
//播放一段无声音乐,使其可以一直在后台进行计步
此方法为第三方 若要详细了解,请下载demo自行研究
[[MMPDeepSleepPreventer sharedSingleton] startPreventSleep];
至此,就先普及这么多吧。文中的说话方式和一些内容纯属娱乐,希望大家不要介意。我也是菜鸟,希望大神可以批评指正。因为这样才能进步。文中链接比较多。大家也可以收藏下本文,今后备不时之需。实时计步还算挺火的。
对了 附上demo 链接
这篇文章介绍两种可以获取计步数据的方法,一种是采用CMPedometer获取手机计步器数据,另一种是采用HealthKit框架从手机健康App中获取计步数据。另外玩了一下写入数据到健康App。有描述不当之处,望指点。 花絮(用HealthKit框架构建app,写入数据到苹果...
最近在项目中研究计步模块,主要功能记录当天步数,类似微信运动,支付宝计步,咕咚今日步数。开发之前的调研工作,搜遍baidu,google,github都没有找到我想要的demo和文章,大多数都是需要Service保活。对于各大手机厂商为了提高电池的续航里程AlertMana...
在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源。共享资源库定义应用程序可以调用的函数和方法。 iOS为应用程序开发提供了许多可使用的框架,并构成IOS操作系统的层次架构,分为四层,从上到下依次为:Cocoa T...
欢迎Follow我的GitHub, 关于计步算法库的算法原理与使用方法. 计步器作为算法功能模块, 与业务模块分离, 解耦合. 这样也可以更加专注于算法的升级. 最新功能, 具体参考线上产品: 春雨医生, 春雨计步器. 我来简述一下计步器算法的实现原理, 给大家一些启发. ...
Android传感器定义 Android 传感器相关术语微机电传感器(MEMS)MEMS 通常制作在规格很小的硅芯片上,借用了计算机芯片的制作技术。通常来说,所有的 Android 传感器都使用了这些技术,但是从技术的角度来说,MEMS 指的是在该传感器的部分设计中纳入了物...
彡白 躺在枕上的梦里 其实已经有了预言 从北到南去 再到地铁的站台 时间表不断地更换 其实这一切 都已经开始变得不寻常 但是一场人生的事 总不会太过容易 或许从很多年前的冬天开始 也或许从他说的第一句话开始 这一切早晚都会表明 生命之中最重要...
今天的课程由吴凡院长亲自上阵……干货太多,只能略选其中印象深刻的…先由认知现在的社会、公司、个体开始,社会高速发展,具有4个特性:易变性、不确定性、复杂性、模糊性,科技的变化(科学家预测40年后高智能机器人将代替技术人员,60年后人可以永生)供方和需方的变化非常大...
在雨地里穿行,总有幸福不期而至。电影里的画面,生活里也有。总能看到恋人在雨中携子之手惊慌奔跑的情景,用上衣遮住女孩的头而不是用伞,笑声从如丝如缕的雨幕中飘来,给人一种浪漫的喜悦。 王建的诗《雨过山村》有一句,“雨里鸡鸣一两家,竹溪村路板桥斜”,充满了诗情画意,能不叫人流连忘...704被浏览619,540分享邀请回答236 条评论分享收藏感谢收起3726 条评论分享收藏感谢收起

我要回帖

更多关于 ios app源代码 的文章

 

随机推荐