首页 > 编程知识 正文

我要安装微信,实时计步软件

时间:2023-05-06 15:26:31 阅读:148914 作者:2311

最近项目研究了计步器模块,每天从0点开始记录当天的步数。 就像微信运动一样。 因为碰到了很多洞,所以今天有时间整理一下给大家看。

做之前在谷歌、baidu、github上找不到好的东西。 大部分都需要在后台生存,需要后台服务。

现在的大型手机制造商为了提高电池的续航距离(省电),基本上都会杀死AlertManager、Android.intent.action.boot _ completed和后台服务。

后台保存战略服务,基本上没什么用,被手机系统杀死只是时间问题,所以我觉得还是不做的好。 即使后台还活着,用户看到这个APP也会非常消耗电力,所以会被删除。

项目地址: https://github.com/Jia hongfei/todaystepcounter

第二编地址: http://www.Jian Shu.com/p/c4bb1c 45 aeec

目前,android仪表步骤有两种方法

系统步骤芯片

从Android 4.4版开始,部分机型实现了Sensor.TYPE_STEP_COUNTER传感器来记录用户行走的步数。 手机开机后开始记录,手机关机后重置为0。

该计步器芯片在系统级,相对于较早版本的传感器计步器,性能进行了一些优化:

因为APP使用单独记住步数的功能,所以不会额外消耗电力

系统芯片的步数是可持续的,可以在部分机型的后台优化不记住步数的问题。

加速度传感器计算方式

该传感器非常耗电,APP功耗高,会影响用户体验。

如果不在后台实时运行,就无法实现记住步数的功能。 如果APP进程被系统或安全软件杀死,则无法使用记住步数的功能

当通过以上两种方式实现计步器时,在移动电话提供计步器传感器时使用Sensor.TYPE_STEP_COUNTER方式,在不提供计步器传感器时使用Sensor.TYPE_ACCELEROMETER方式(app方式)

项目结构:

计步器Service使用单独的进程,因此使用进程间通信aidl。 todaystepcounterlib用于在单独的进程中实现库文件的计步器算法,app依赖于todaystepcounterlib项目来获取当前步数的表示。

screenshots.png

访问方法:

有关在项目结构app中使用计步器模块的信息,请参考以下代码

publicclassmainactivityextendsappcompatactivity {

privatestaticstringtag='主活动';

privatestaticfinalintrefresh _ step _ what=0;

//循环取当前时刻步数中间的间隔时间

private long time _ interval _ refresh=500;

privatehandlermdelayhandler=new handler (newtodaystepcountercall );

私有int MST epsum;

privateisportstepinterfaceisportstepinterface;

@Override

保护性视频创建(bundlesavedinstancestate )。

super.oncreate (savedinstancestate;

setcontentview (r.layout.activity _ main;

intentintent=newintent(this,VitalityStepService.class;

sartservice(intent );

bindservice(intent,new ServiceConnection )。

@Override

公共服务连接(componentnamename,I binder服务) )。

isportstepinterface=isportstepinterface.stub.as interface (服务;

try {

MST epsum=isportstepinterface.getcurrtimesportstep (;

updateStepCount (;

}catch(remoteexceptione ) {

e .打印任务跟踪(;

}

mdelayhandler.sendemptymessagedelayed (refresh _ step _ what,TIME_INTERVAL_REFRESH );

}

@Override

public void onServiceDisconnected(ComponentName name){

}

}, Context.BIND_AUTO_CREATE);

}

class TodayStepCounterCall implements Handler.Callback{

@Override

public boolean handleMessage(Message msg){

switch (msg.what) {

case REFRESH_STEP_WHAT: {

if (null != iSportStepInterface) {

int step = 0;

try {

step = iSportStepInterface.getCurrTimeSportStep();

} catch (RemoteException e) {

e.printStackTrace();

}

if (mStepSum != step) {

mStepSum = step;

updateStepCount();

}

}

mDelayHandler.sendEmptyMessageDelayed(REFRESH_STEP_WHAT, TIME_INTERVAL_REFRESH);

break;

}

}

return false;

}

}

private void updateStepCount(){

Log.e(TAG,"updateStepCount : " + mStepSum);

TextView stepTextView = (TextView)findViewById(R.id.stepTextView);

stepTextView.setText(mStepSum + "步");

}

}

计步策略:

1.如果使用加速度传感器计步必须要app在后台存活才可以计步。‘

2.重头戏是使用计步传感器实现计步,app在后台关闭也可以计步。

如下是采用Sensor.TYPE_STEP_COUNTER传感器实现计步策略:

1. 用户新安装app,从用户第一次打开App开始计步,当天不跨天

case_1.png

2. 用户一直打开app计步,且跨越0点没有关闭App

case_2.png

3.用户打开一次App后台关闭,跨越0点且0点分隔AlertManager不能自启动(目前多数手机都是不能启动的)

case_3.png

4.用户打开一次app后台关闭,跨越多个0点且Alertmanager 0点分隔可以启动

case_4.png

5.用户开启一次app且在同一天进行重启手机(自启动不好用,很多手机不好用)

case_5.png

6.用户开启一次app,开关机跨0点(开机自启动不好用)

case_6.png

7.用户开启一次app,开关机跨0点(开机自启动可以)

case_7.png

缺陷

1.方案三 跨0点打开app步数算 前一天的,如果跨越多天会导致前一天步数非常大。

2.方案四 跨0点之前的步数会丢失(由于0点分隔AlertManager可以回调,所以可以处理0点之前的数据,以后版本在修复吧)

3.在计步器回调中频繁调用SharePreference费电

注意:

1.每天早上打开App可以提高几步精度,和微信步数几乎一致。 2.每次重启手机请打开app,会合并步数

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。