android计步器报告书,Android精准计步器开发-Dylan计歩

Android精准计步器开发

亲测在小米.魅族.华为上可用,该app采用后台service计歩服务,所以只要app不被手机杀死在后台也是可以正常计歩的。上图:

f2c23b91df6f

f2c23b91df6f

f2c23b91df6f

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

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

android:name="android.hardware.sensor.stepcounter"

android:required="true" />

android:name="android.hardware.sensor.stepdetector"

android:required="true" />

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

/**

* 判断该设备是否支持计歩

*

* @param context

* @return

*/

@TargetApi(Build.VERSION_CODES.KITKAT)

public static boolean isSupportStepCountSensor(Context context) {

// 获取传感器管理器的实例

SensorManager sensorManager = (SensorManager) context

.getSystemService(context.SENSOR_SERVICE);

Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);

Sensor detectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);

return countSensor != null || detectorSensor != null;

}

3.功能使用

private boolean isBind = false;

private Messenger mGetReplyMessenger = new Messenger(new Handler(this));

private Messenger messenger;

/**

* 开启计步服务

*/

private void setupService() {

Intent intent = new Intent(this, StepService.class);

isBind = bindService(intent, conn, Context.BIND_AUTO_CREATE);

startService(intent);

}

/**

* 从service服务中拿到步数

*

* @param msg

* @return

*/

@Override

public boolean handleMessage(Message msg) {

switch (msg.what) {

case Constant.MSG_FROM_SERVER:

cc.setCurrentCount(10000, msg.getData().getInt("step"));

break;

}

return false;

}

/**

* 用于查询应用服务(application Service)的状态的一种interface,

* 更详细的信息可以参考Service 和 context.bindService()中的描述,

* 和许多来自系统的回调方式一样,ServiceConnection的方法都是进程的主线程中调用的。

*/

ServiceConnection conn = new ServiceConnection() {

/**

* 在建立起于Service的连接时会调用该方法,目前Android是通过IBind机制实现与服务的连接。

* @param name 实际所连接到的Service组件名称

* @param service 服务的通信信道的IBind,可以通过Service访问对应服务

*/

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

try {

messenger = new Messenger(service);

Message msg = Message.obtain(null, Constant.MSG_FROM_CLIENT);

msg.replyTo = mGetReplyMessenger;

messenger.send(msg);

} catch (RemoteException e) {

e.printStackTrace();

}

}

/**

* 当与Service之间的连接丢失的时候会调用该方法,

* 这种情况经常发生在Service所在的进程崩溃或者被Kill的时候调用,

* 此方法不会移除与Service的连接,当服务重新启动的时候仍然会调用 onServiceConnected()。

* @param name 丢失连接的组件名称

*/

@Override

public void onServiceDisconnected(ComponentName name) {

}

};

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值