Skip to content

Repository files navigation

Android精准计步开发

亲测在小米.魅族.华为上可用

下载体验

万分感谢项目中使用两位大神的算法

1.需要在AndroidManifest.xml中添加权限

<!--计歩需要的权限-->
<uses-permissionandroid:name="android.permission.VIBRATE" />
<uses-permissionandroid:name="android.permission.WRITE_SETTINGS" />
<uses-featureandroid:name="android.hardware.sensor.accelerometer" />
<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-featureandroid:name="android.hardware.sensor.stepcounter"android:required="true" />
<uses-featureandroid:name="android.hardware.sensor.stepdetector"android:required="true" />

2.检测手机是否支持计歩

/** * 判断该设备是否支持计歩 * * @param context * @return */@TargetApi(Build.VERSION_CODES.KITKAT)
publicstaticbooleanisSupportStepCountSensor(Contextcontext) {
// 获取传感器管理器的实例SensorManagersensorManager = (SensorManager) context
.getSystemService(context.SENSOR_SERVICE);
SensorcountSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
SensordetectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
returncountSensor != null || detectorSensor != null;
}

3.功能使用

privatebooleanisBind = false;
privateMessengermGetReplyMessenger = newMessenger(newHandler(this));
privateMessengermessenger;
/** * 开启计步服务 */privatevoidsetupService() {
Intentintent = newIntent(this, StepService.class);
isBind = bindService(intent, conn, Context.BIND_AUTO_CREATE);
startService(intent);
}
/** * 从service服务中拿到步数 * * @param msg * @return */@OverridepublicbooleanhandleMessage(Messagemsg) {
switch (msg.what) {
caseConstant.MSG_FROM_SERVER:
cc.setCurrentCount(10000, msg.getData().getInt("step"));
break;
}
returnfalse;
}
/** * 用于查询应用服务(application Service)的状态的一种interface, * 更详细的信息可以参考Service 和 context.bindService()中的描述, * 和许多来自系统的回调方式一样,ServiceConnection的方法都是进程的主线程中调用的。 */ServiceConnectionconn = newServiceConnection() {
/** * 在建立起于Service的连接时会调用该方法,目前Android是通过IBind机制实现与服务的连接。 * @param name 实际所连接到的Service组件名称 * @param service 服务的通信信道的IBind,可以通过Service访问对应服务 */@OverridepublicvoidonServiceConnected(ComponentNamename, IBinderservice) {
try {
messenger = newMessenger(service);
Messagemsg = Message.obtain(null, Constant.MSG_FROM_CLIENT);
msg.replyTo = mGetReplyMessenger;
messenger.send(msg);
} catch (RemoteExceptione) {
e.printStackTrace();
}
}
/** * 当与Service之间的连接丢失的时候会调用该方法, * 这种情况经常发生在Service所在的进程崩溃或者被Kill的时候调用, * 此方法不会移除与Service的连接,当服务重新启动的时候仍然会调用 onServiceConnected()。 * @param name 丢失连接的组件名称 */@OverridepublicvoidonServiceDisconnected(ComponentNamename) {
}
};

About

Android精准计步器

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages