Android项目开发:简易计步器
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项目开发:简易计步器相关推荐
- Android项目开发填坑记-Fragment的onAttach
背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...
- Android项目开发—GeoQuiz
Android项目开发-GeoQuiz 应用规划 确定功能 必须的界面及界面跳转的流程 ... 界面设计 主界面确定 模块界面.列表.查看.编辑界面 添加需要的组件 ... 数据操作和存储 业务实现 ...
- Android项目开发:指南针(两种方法实现)
Android项目开发:指南针应用的实现 1.基于方向传感器 activity_main.xml MainActivity.java 2.基于加速度传感器和地磁传感器 在Android中可以使用内置传 ...
- Android项目开发实战常用知识点
Android项目开发实战常用知识点 一:启动页延时两秒再跳转到主界面: //执行类 private class SlpashRunnable implements Runnable {@Overri ...
- android项目开发教程,Android项目开发教程
Android项目开发教程 编辑 锁定 讨论 上传视频 Android项目开发教程 书 名 Android项目开发教程 作 者 车金庆.何征天.李琳.严正宇.周凌翱 类 别 图书&g ...
- Android实训内容及过程,Android项目开发实训大纲.doc
Android项目开发实训大纲Android项目开发实训大纲 黎明职业大学信息与电子工程学院 <Android项目开发> 实训指导书 2014年6月 <Android项目开发> ...
- android 建立工程文件,Android 项目开发必备-建立属于你的build.gradle文件
timg (1).jpg 开发一个Android项目不仅仅需要你会写java/kotlin代码,而且你还要了解各种配置文件.例如.AndroidManifest.xml,混淆文件,build.grad ...
- android2048项目报告,Android项目开发实战-2048游戏
<2048>是一款比较流行的数字游戏,最早于2014年3月20日发行.原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台.这款游戏是基于&l ...
- Android 项目开发填坑记 - 使用 MultiDex 解决 64K 限制
如果移动端访问不佳,请访问 –> Github版 背景 Android 的 classLoader 在加载 APK 的时候限制了class.dex 包含的 Java 方法数,其总数不能超过655 ...
最新文章
- 自动填充脚本使用及注意事项
- Loss曲线震荡分析
- 代码重构----使用java有限状态机来消除太多的if else判断
- qt 中如何检测是否按下键盘(很实用)
- php-fpm通过request_slowlog_timeout检查哪个脚本执行时间长
- asp关于从utf8页面到gb2312页面出现乱码得解决
- 逻辑备库的Swichover和Failover
- 数据库和Webapp安全
- meshgrid 的使用方法
- android开发常用技术,[转载]Android开发常用调试技术记录
- MySQL常用DDL语法总结
- K60(Cortex-M4)开源开发探索(一)—— K60简介
- Java课程设计 商品管理系统
- 项目管理-4-运筹帷幄
- 【转】京东抢购服务高并发实践
- 关于笔记本电脑修改显示器刷新频率后,重新开机时会自动修改为上一次的频率问题
- Google Chrome误删书签的恢复方式!
- 2.04 标志寄存器
- LD3320语音识别模块+MP3-TF-16P模块实现语音交互功能
- RHEL8.0快速入门系列笔记--理论知识储备(一)