商务服务
android 计步 开放SDK 安卓简单计步器开发手机自动计步器「android 计步 开放SDK 安卓简单计步器开发」
2025-02-19 08:44


作者:码农一颗颗

昨天看到的文章,记得很久前也有朋友咨询计步器怎么实现,如何保活之类的,刚好看到了文章,然后下载了demo体验了一哈,顺便看了下代码,也算是补充了一下自己的知识面。

因为是取得系统计步数,也是相当的精准,今天有意跑了一天,和微信运动做了下对比。

android 计步 开放SDK 安卓简单计步器开发_加速度传感器

android 计步 开放SDK 安卓简单计步器开发_重启_02

 

两者差距大概在20步,可以说几乎一致了。

ps:一大早我打了一下,当时是0,对其这么精准可能有帮助,测试机:小米5S。

好了,下面将作者的计步器实现分享给大家,希望对你有用。

1

写在前面

最近在项目中研究计步模块,主要功能记录当天步数,类似微信运动,支付宝计步,咕咚今日步数。
开发之前的调研工作,搜遍baidu,google,github都没有找到我想要的demo和文章,大多数都是需要Service保活。
对于各大手机厂商为了提高电池的续航里程alertManager、BOOT_COMPLETED、Service的START_STICKY基本上都是不起作用的,Service后台保活更是不可能。

下面是我实现的计步模块和大家一起学习。

  • github地址
    https://github.com/jiahongfei/TodayStepCounter

之前也有一篇文章写计步模块,这篇文章是对上面文章的优化,github代码已经更新到最新了。

  • Android计步模块(类似微信运动)
    http://www.jianshu.com/p/ca1e1c3ac086

2

App计步模块优化的三个过程

第一个过程上线:
由于功能着急上线,项目最开始计步模块单独使用加速度传感器Sensor.TYPE_ACCELEROMETER进行计算步数,同时Service需要在后台存活才能计步,否则不能计步。

第二个过程计步器:
项目运行一段时间公司开始推广走路计步这个模块,所以开始重新开发计步模块,这次使用了Android4.4以上提供的计步传感器Sensor.TYPE_STEP_COUNTER来完成,这次重新开发整个计步模块有了质的飞跃,由于采用了计步传感器不在需要后台保活Service,同时计步传感器的功耗特别低,整个模块也更省电了。

第三个过程优化计步:
用户量变大了投诉也变多了,android各种各样的机型真是让人蛋疼,终于到了第三个阶段优化阶段。
遇到最多的问题:

  • 1.Android4.4以上的系统但是手机没有计步协处理器
  • 2.部分手机步数出现暴增现象,有可能一天几十万步
  • 3.部分手机出现一天清零好多次。
  • 4.开机计步不能自启动,需要打开app(我已经监听BOOT_COMPLETED广播)
  • 5.隔天分隔(0点分隔)不好用每天早上需要打开app(我已经设置alertManager)

这篇文章就来介绍现在app的计步模块,已经解决上述问题1、2、3,至于4、5问题是系统问题正在寻找解决方案,大家也可以帮帮忙在评论中给我提示。

已经将计步模块单独封装成libModule上传github如果有开发者需要的或者想交流的可以很方便的使用下载,点击这里下载。

https://github.com/jiahongfei/TodayStepCounter

3

计步方式背景知识

1.加速度传感器Sensor.TYPE_ACCELEROMETER计步方式:

这种方式是有开源的算法根据加速度传感器进行计算步数;

优点:只要有加速度传感器的设备都可以使用,相对来说可以使用的设备较多。

缺点:步数的准确性取决于算法且算法比较难优化;需要后台保活Service否则不能计步;计步算法比较费电;部分手机锁屏不能计步;

2.计步传感器Sensor.TYPE_STEP_COUNTER计步方式:

官方解释翻译(本人英文不是很好根据理解翻译,如有错误请指出):
这个传感器是返回手机系统启动到当前时间的所有步数。手机系统重启传感器返回步数为0。还返回一个时间戳,表示最后一次步数的时间。这个计步传感器是个硬件,功耗非常低。如果你想记录步数,注册该传感器不要注销,他能自动在后台计步,在app唤醒的时候会返回计步总数。应用程序需要注册该传感器,否则不能返回步数。
优点:硬件计步准确性高;功耗小;只要注册不用后台Service自动计步;

缺点Android4.4系统以上的部分手机;手机系统重启计步器清零;不能返回步数明细(步数对应时间),只是返回当前时间的总步数。

计步模块两种计步方式都采用:
判断是否支持Sensor.TYPE_STEP_COUNTER如果支持采用计步传感器,如果不支持用加速度传感器计步。
使用加速度传感器计步需要用户自己手动设置后台自启动,否则不能计步。
使用计步传感器需要在程序中克服他的缺点:手机系统重启计步器清零;不能返回步数明细(步数对应时间),只是返回当前时间的总步数。

先介绍接入方法,在介绍计步模块原理。

4

接入方法

1.先下载计步demo TodayStepCounter

2.demo项目结构如下图:

android 计步 开放SDK 安卓简单计步器开发_github_03

 

由图可见todaystepcounterlib是计步模块封装好的Module,它对外提供的接口就是ISportStepInterface.aidl
3.如何接入:

查看对外接口ISportStepInterface.aidl如下代码:

 

查看使用代码MainActivity.java,里面关键代码有注释非常简单

 

5

计步模块原理

计步模块流程图

android 计步 开放SDK 安卓简单计步器开发_github_04

 

讲解流程图:

1.整个计步模块是由一个运行在单独进程的Service(TodayStepService)来提供,由于运行在单独的进程所以对外提供的接口采用aidl形式(ISportStepInterface)。

2.零点分隔广播(TodayStepalertReceive):用来解决跨天计步模块归零问题,由于计步传感器不会根据天来分割只是返回当前步数的总和,所以需要这个广播来对计步模块进行分割,只要跨天了计步模块就归零从0开始计步。

3.开机广播(TodayStepBootCompleteReceiver):开机广播用来解决手机重启计步传感器归零问题,由于计步传感器手机重启会归零,所以收到开机广播会做步数合并,启动Service从上次关机的步数开始累加。

4.数据库(TodayStepDBHelper):用来记录当天步数明细,一个时间对应一个步数

5.加速度传感器计步(TodayStepDcretor):由于android4.4以下或者一些特殊的手机不提供计步传感器所以这些机型采用加速度传感器进行计步,通过OnStepCounterListener监听返回给TodayStepService .

6.计步传感器计步(TodayStepCounter):android4.4以上提供了计步协处理器,可以通过计步传感器计步功耗小,计步准,通过OnStepCounterListener监听返回给TodayStepService .

7.关机监听(TodayStepShutdownReceiver):用来判断手机是否关机,当重启手机打开计步Service根据这个标志来判断是否重启进行步数合并,主要是增加精度有时开机广播不能收到。

加速度传感器计步流程图

android 计步 开放SDK 安卓简单计步器开发_github_05

 

讲解流程图:
Android4.4以下或者一些特殊的手机不提供计步传感器,我只能用加速度传感器计步,加速度传感器的原理就是利用一定的算法模拟出步数(加速度传感器计步算法不在本篇文章讨论的范围之内),用这种方式计步Service一定要在后台存活否则不能计步,这种方式跨天分隔步数利用Intent.ACTION_TIME_TICK广播回调来判断当前时间和上次PreferencesHelper记录的时间是否相同如果不同步数归零从0开始计步,步数的记录采用PreferencesHelper来保存,防止当天重启手机系统步数归零。

计步传感器计步流程图

android 计步 开放SDK 安卓简单计步器开发_加速度传感器_06

 

讲解流程图:
Android4.4以上的可以使用计步传感器进行计步,至于计步传感器的有点上面已经介绍了。这种方式部分手机可以不需要程序自启动权限。

跨天分隔步数采用两种方式:

1.第一种方式和上面一样采用Intent.ACTION_TIME_TICK广播,这里不多说了。
2.第二种方式采用alertManager方式也就是设置0点闹钟,在这个0点广播中对步数进行分隔,这个alertManager不是每个手机都可以启动的。

手机系统重启判断采用四种方式:
1.开机广播监听BOOT_COMPLETED,这个监听不是每个手机都可以收到,如果收到可以启动Service,然后做步数合并使计步模块从上次关机时的步数开始累加,如果收不到只能用下面几种方式增加重启的判断了。
2.关机广播监听ACTION_SHUTDOWN,这个监听不是每个手机都可以收到,如果收到,在用户手动启动 Service中可以判断系统重启了。
3.记录运行时间判断手机重启,上次运行的时间大于当前运行时间判断为重启,只是增加精度,极端情况下连续重启,会判断不出来。
4.上次传感器步数总和,当前传感器步数小于上次传感器步数肯定是重新启动了,只是用来增加精度不是绝对的

计步传感器计步核心流程

android 计步 开放SDK 安卓简单计步器开发_加速度传感器_07

 

这个流程图的讲解都在图片上。

提高计步精度:

1.设置app后台自启动
2.各种安全软件设置app为白名单,为了保证app不被任何安全软件在后台杀死。
以上两种方式保证通知栏中一直显示app的步数。
3.手机系统重启,如果通知栏中没有显示步数,表示app没有收到开机监听,需要手动启动app,否则步数会丢失 。
app一直在后台存活肯定会耗电,部分手机可以在后台关闭的情况下计步,但是这种方式需要每天早上打开一次app让计步模块对步数进行清零否则步数会丢失。

需要优化:

1.每次传感器回调都会写三次SharedPreferences。
2.计步模块在后台存活,每天过0点开始计步都会丢失一些步数,丢失的步数跟启动计步传感器需要的步数有关,例如:我的测试机连续走10步才可以启动计步传感器回调,所以就丢失10步。

总结:

    以上就是本篇文章【android 计步 开放SDK 安卓简单计步器开发手机自动计步器「android 计步 开放SDK 安卓简单计步器开发」】的全部内容了,欢迎阅览 ! 文章地址:http://fabua.ksxb.net/news/8878.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 海之东岸资讯移动站 http://fabua.ksxb.net/mobile/ , 查看更多   
最新文章
消失的手机:曾经的模块化鼻祖,外观设计大师退出市场模块化手机「消失的手机:曾经的模块化鼻祖,外观设计大师退出市场」
在智能手机全面向触屏时代迈进以后,大约在2013年-2016年之间,国内的智能手机品牌可以说是百花齐放,国产智能手机品牌很多也是
华硕手机应用商店手机应用商城「华硕手机应用商店」
华硕手机应用商店是一个方便、快捷且易于使用的软件应用商店。在华硕手机应用商店中,您可以根据您要下载的软件类别进行,相应的
堪比职业玩家的电竞体验,vivo S7游戏魔盒竟有如此妙用vivo游戏手机「堪比职业玩家的电竞体验,vivo S7游戏魔盒竟有如此妙用」
玩游戏,讲究的不仅仅只是技术,主要离不开的还是硬件设备的支持。大家平日里用玩游戏总会觉得不过瘾。有的时候,欠缺的未必是技
美防长敦促日本强化防卫能力
参考消息网3月31日报道 据《日本经济新闻》3月30日报道,30日,日本防卫相中谷元在防卫省与来访的美国国防部长赫格塞思举行特朗
短剧人抱团出海,争抢唯一确定的增量
文 | 新声Pro,作者 | 王珊珊(北京)「我们整个公司的重心,包括我个人的重心,现在都放在海外。」短剧出海厂牌 Crest Pte.Ltd
快速教你玩转手机备忘录手机备忘录「快速教你玩转手机备忘录」
手机中有一个叫“备忘录”的APP,大家应该经常会用到,对这个功能应该也不陌生了,这里就说说几个大家有可能未发现的功能,用起
佛经上说释迦牟尼佛有三十二相,具体是哪些相?佛手机「佛经上说释迦牟尼佛有三十二相,具体是哪些相?」
佛教,就是佛陀的教育。我们在经上常常看到说,释迦牟尼佛有三十二相,这些相也是为表法所用,代表圆满到极处。每一种相都是由一
A股的估值现在贵不贵?
伴随“四月决断”的到来,市场风格逐渐从题材投资回归价值投资,而价值投资的一大核心理念就在于股价和企业基本面的适配程度——
劳力士都不保值了?为啥奢侈品手表都不值钱了?
在世界奢侈品市场上,有一类奢侈品被视为保值增值的标的,比如说大名鼎鼎的爱马仕和香奈儿的香包,再比如说知名的奢侈品手表劳力
《不思异:志怪》大结局意犹未尽,“中式志怪”细节拉满
由搜狐视频出品,兔狲文化制作,出品人张朝阳,总制片人曹迪、邱其虎,席文婷执导,袁哲总编剧,何昶希、赵嘉敏、袁梓铭、薛卉葳