Android项目开发:简易计步器的实现

本文将介绍基于Android的加速度传感器和陀螺仪传感器开发一个简易的计步器,基本原理:当检测到加速度发生改变时,使步数加一。

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="30dp"android:text="简易计步器"android:textSize="25sp" /><TextViewandroid:id="@+id/tv_step"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="5dp"android:text="0"android:textColor="#DE5347"android:textSize="100sp"android:textStyle="bold" /><Buttonandroid:id="@+id/btn_start"android:layout_width="match_parent"android:layout_height="64dp"android:text="开始"android:textSize="25sp" /></LinearLayout>

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener, SensorEventListener {private SensorManager sensorManager;private Sensor sensor;private TextView textView_step;private Button button_start;private int step;private double original_value;private double last_value;private double current_value;private boolean motionState=true; //是否处于运动状态private boolean processState=false;  //是否已经开始计步@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);step=0;original_value=0;last_value =0;current_value =0;sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //获取传感器,在计步器中需要使用的是加速度传感器sensorManager.registerListener(this,sensor,sensorManager.SENSOR_DELAY_UI);textView_step=(TextView) findViewById(R.id.textview_step);button_start=(Button) findViewById((R.id.button_start));button_start.setOnClickListener(this);}@Overridepublic void onSensorChanged(SensorEvent event) {double range=1; //设置一个精度范围float[] value=event.values;current_value =magnitude(value[0],value[1],value[2]); //计算当前的模//向上加速的状态if(motionState==true){if (current_value >= last_value)last_value = current_value;else {//检测到一次峰值if(Math.abs(current_value-last_value)>range){original_value=current_value;motionState=false;}}}//向下加速的状态if(motionState==false){if (current_value <= last_value)last_value = current_value;else {//检测到一次峰值if(Math.abs(current_value-last_value)>range){original_value=current_value;if (processState==true){step++; //检测到开始记录,步数加1if(processState==true){textView_step.setText(step+""); //更新读数}}motionState=true;}}}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}@Overridepublic void onClick(View v) {step=0;textView_step.setText("0");if (processState==true){button_start.setText("出发!GO!");processState=false;}else{button_start.setText("走不动了歇一会~");processState=true;}}private double magnitude(float x, float y, float z) {double magnitude=0;magnitude=Math.sqrt(x*x+y*y+z*z);return magnitude;}
}

链接:项目链接

Android项目开发:简易计步器相关推荐

  1. Android项目开发填坑记-Fragment的onAttach

    背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...

  2. Android项目开发—GeoQuiz

    Android项目开发-GeoQuiz 应用规划 确定功能 必须的界面及界面跳转的流程 ... 界面设计 主界面确定 模块界面.列表.查看.编辑界面 添加需要的组件 ... 数据操作和存储 业务实现 ...

  3. Android项目开发:指南针(两种方法实现)

    Android项目开发:指南针应用的实现 1.基于方向传感器 activity_main.xml MainActivity.java 2.基于加速度传感器和地磁传感器 在Android中可以使用内置传 ...

  4. Android项目开发实战常用知识点

    Android项目开发实战常用知识点 一:启动页延时两秒再跳转到主界面: //执行类 private class SlpashRunnable implements Runnable {@Overri ...

  5. android项目开发教程,Android项目开发教程

    Android项目开发教程 编辑 锁定 讨论 上传视频 Android项目开发教程 书    名 Android项目开发教程 作    者 车金庆.何征天.李琳.严正宇.周凌翱 类    别 图书&g ...

  6. Android实训内容及过程,Android项目开发实训大纲.doc

    Android项目开发实训大纲Android项目开发实训大纲 黎明职业大学信息与电子工程学院 <Android项目开发> 实训指导书 2014年6月 <Android项目开发> ...

  7. android 建立工程文件,Android 项目开发必备-建立属于你的build.gradle文件

    timg (1).jpg 开发一个Android项目不仅仅需要你会写java/kotlin代码,而且你还要了解各种配置文件.例如.AndroidManifest.xml,混淆文件,build.grad ...

  8. android2048项目报告,Android项目开发实战-2048游戏

    <2048>是一款比较流行的数字游戏,最早于2014年3月20日发行.原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台.这款游戏是基于&l ...

  9. Android 项目开发填坑记 - 使用 MultiDex 解决 64K 限制

    如果移动端访问不佳,请访问 –> Github版 背景 Android 的 classLoader 在加载 APK 的时候限制了class.dex 包含的 Java 方法数,其总数不能超过655 ...

最新文章

  1. 自动填充脚本使用及注意事项
  2. Loss曲线震荡分析
  3. 代码重构----使用java有限状态机来消除太多的if else判断
  4. qt 中如何检测是否按下键盘(很实用)
  5. php-fpm通过request_slowlog_timeout检查哪个脚本执行时间长
  6. asp关于从utf8页面到gb2312页面出现乱码得解决
  7. 逻辑备库的Swichover和Failover
  8. 数据库和Webapp安全
  9. meshgrid 的使用方法
  10. android开发常用技术,[转载]Android开发常用调试技术记录
  11. MySQL常用DDL语法总结
  12. K60(Cortex-M4)开源开发探索(一)—— K60简介
  13. Java课程设计 商品管理系统
  14. 项目管理-4-运筹帷幄
  15. 【转】京东抢购服务高并发实践
  16. 关于笔记本电脑修改显示器刷新频率后,重新开机时会自动修改为上一次的频率问题
  17. Google Chrome误删书签的恢复方式!
  18. 2.04 标志寄存器
  19. LD3320语音识别模块+MP3-TF-16P模块实现语音交互功能
  20. RHEL8.0快速入门系列笔记--理论知识储备(一)

热门文章

  1. 09-kafka分区数的设置
  2. Dapper大规模分布式系统问题跟踪系统
  3. 02 QEMU默认支持的所有开发板、芯片列表
  4. Wu反走样算法介绍(简单易懂) -Xiaolin Wu’s Algorithm
  5. 老文新读 | 大数据于国内影视行业的意义及应用
  6. 推荐几本书给大家(二)
  7. 【汉字识别】基于贝叶斯网络实现汉字识别含Matlab源码
  8. UE4-地形植被自动分布方法
  9. 深入浅出boot2.0第六章 数据库事务处理 隔离级别 传播行为
  10. canvas实现图片缩放+涂鸦