Android移动开发-调用步行检测和步行计数传感器开发简易计步器的实现

Android计步器的原理其实是通过手机的前后摆动模拟步伐节奏的监测。Android中与计步器有关的传感器有两个,一个是步行检测(TYPE_STEP_DETECTOR),另一个是步行计数(TYPE_STEP_COUNTER)。其中,步行检测的返回值为1时,表示当前检测到一个步伐;步行计数的返回值是累加后的数值,表示本次开机激活后的总步伐数。

  • layout/activity_main.xml界面布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv_step"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="走一走,看看有什么"
        android:textSize="20sp" />

</LinearLayout>
  • MainActivity.java逻辑代码如下:
package com.fukaimei.steptest;

import java.util.List;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements SensorEventListener {
    private TextView tv_step;
    private SensorManager mSensroMgr;
    private int mStepDetector = 0;
    private int mStepCounter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_step = (TextView) findViewById(R.id.tv_step);
        mSensroMgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensroMgr.unregisterListener(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        int suitable = 0;
        List<Sensor> sensorList = mSensroMgr.getSensorList(Sensor.TYPE_ALL);
        for (Sensor sensor : sensorList) {
            if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
                suitable += 1;
            } else if (sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
                suitable += 10;
            }
        }
        if (suitable/10>0 && suitable%10>0) {
            mSensroMgr.registerListener(this,
                    mSensroMgr.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR),
                    SensorManager.SENSOR_DELAY_NORMAL);
            mSensroMgr.registerListener(this,
                    mSensroMgr.getDefaultSensor(Sensor.TYPE_STEP_COUNTER),
                    SensorManager.SENSOR_DELAY_NORMAL);
        } else {
            tv_step.setText("当前设备不支持计步器,请检查是否存在步行检测传感器和计步器传感器");
        }
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
            if (event.values[0] == 1.0f) {
                mStepDetector++;
            }
        } else if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
            mStepCounter = (int) event.values[0];
        }
        String desc = String.format("设备检测到您当前走了%d步,总计数为%d步",
                mStepDetector, mStepCounter);
        tv_step.setText(desc);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
}
  • 注意:安装的手机必须要含有步行检测(TYPE_STEP_DETECTOR)和步行计数(TYPE_STEP_COUNTER)传感器才能监测步数和计步。

  • Demo程序运行效果界面截图如下:

这里写图片描述


  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值