Android-传感器-实现记录人行走的轨迹
本文源码:https://github.com/lioilwin/StepOrient
利用Android传感器-方向和计步组合使用,可以在地图上记录人行走的轨迹图
传感器类源码在上两篇文章中,本主要是方向和计步组合使用!
一.方向和计步组合使用,记录轨迹图
public class MainActivity extends AppCompatActivity implements StepSensorBase.StepCallBack, OrientSensor.OrientCallBack {private TextView mStepText;private TextView mOrientText;private StepView mStepView;private StepSensorBase mStepSensor; // 计步传感器private OrientSensor mOrientSensor; // 方向传感器private int mStepLen = 50; // 步长@Overridepublic void Step(int stepNum) {// 计步回调mStepText.setText("步数:" + stepNum);mStepView.autoAddPoint(mStepLen);}@Overridepublic void Orient(int orient) {// 方向回调mOrientText.setText("方向:" + orient);
// 获取手机转动停止后的方向
// orient = SensorUtil.getInstance().getRotateEndOrient(orient);mStepView.autoDrawArrow(orient);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SensorUtil.getInstance().printAllSensor(this); // 打印所有可用传感器setContentView(R.layout.activity_main);mStepText = (TextView) findViewById(R.id.step_text);mOrientText = (TextView) findViewById(R.id.orient_text);mStepView = (StepView) findViewById(R.id.step_surfaceView);// 注册计步监听
// mStepSensor = new StepSensorPedometer(this, this);
// if (!mStepSensor.registerStep()) {mStepSensor = new StepSensorAcceleration(this, this);if (!mStepSensor.registerStep()) {Toast.makeText(this, "计步功能不可用!", Toast.LENGTH_SHORT).show();}
// }// 注册方向监听mOrientSensor = new OrientSensor(this, this);if (!mOrientSensor.registerOrient()) {Toast.makeText(this, "方向功能不可用!", Toast.LENGTH_SHORT).show();}}@Overrideprotected void onDestroy() {super.onDestroy();// 注销传感器监听mStepSensor.unregisterStep();mOrientSensor.unregisterOrient();}
}
二.获取手机转动停止的方向,优化转动角度偏差
/*** 传感器工具类,*/
public class SensorUtil {private static final String TAG = "SensorUtil";private static final SensorUtil sensorUtil = new SensorUtil(); // 单例常量private SensorManager sensorManager;private static final int SENSE = 10; // 方向差值灵敏度private static final int STOP_COUNT = 6; // 停止次数private int initialOrient = -1; // 初始方向private int endOrient = -1; // 转动停止方向private boolean isRotating = false; // 是否正在转动private int lastDOrient = 0; // 上次方向与初始方向差值private Stack<Integer> dOrientStack = new Stack<>(); // 历史方向与初始方向的差值栈···········省略··········/*** 获取手机转动停止的方向* @param orient 手机实时方向*/public int getRotateEndOrient(int orient) {if (initialOrient == -1) {// 初始化转动endOrient = initialOrient = orient;Log.i(TAG, "getRotateEndOrient: 初始化,方向:" + initialOrient);}int currentDOrient = Math.abs(orient - initialOrient); // 当前方向与初始方向差值if (!isRotating) {// 检测是否开始转动lastDOrient = currentDOrient;if (lastDOrient >= SENSE) {// 开始转动isRotating = true;}} else {// 检测是否停止转动if (currentDOrient <= lastDOrient) {// 至少累计STOP_COUNT次出现当前方向差小于上次方向差int size = dOrientStack.size();if (size >= STOP_COUNT) {// 只有以前SENSE次方向差距与当前差距的差值都小于等于SENSE,才判断为停止for (int i = 0; i < size; i++) {if (Math.abs(currentDOrient - dOrientStack.pop()) >= SENSE) {isRotating = true;break;}isRotating = false;}}if (!isRotating) {// 停止转动dOrientStack.clear();initialOrient = -1;endOrient = orient;Log.i(TAG, "getRotateEndOrient: ------停止转动,方向:" + endOrient);} else {// 正在转动,把当前方向与初始方向差值入栈dOrientStack.push(currentDOrient);Log.i(TAG, "getRotateEndOrient: 正在转动,方向:" + orient);}} else {lastDOrient = currentDOrient;}}return endOrient;}
}
简书: http://www.jianshu.com/p/06343a6aa8df
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/62961016
GitHub博客:http://c.lioil.win/2017/03/17/Android-Route.html
Coding博客:http://lioil.win/2017/03/17/Android-Route.html
Android-传感器-实现记录人行走的轨迹相关推荐
- 《Android传感器开发与智能设备案例实战》——导读
本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的目录,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 ...
- 《Android传感器开发与智能设备案例实战》——第2章,第2.4节安装ADT
本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的第2章,第2.4节安装ADT,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- 【转】深入探讨 Android 传感器
Android 是一个面向应用程序开发的富平台,它拥有许多具有吸引力的用户界面元素和数据管理功能.Android 还提供了一组丰富的接口选项.在本文中,学习如何配合使用 Android 的各种传感器选 ...
- 《Android传感器开发与智能设备案例实战》——第1章,第1.2节Android的巨大优势...
本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的第1章,第1.2节Android的巨大优势,作者 朱元波,更多章节内容可以访问云栖社区"异步社区&quo ...
- Android传感器-开发指南
大部分Android平台的设备都带有多个传感器,使你能监视其方位和运动状态的变化.很多设备还有其它类型的传感器,让你能感知周围的环境条件,比如温度.压力.湿度和光线.你可以利用Android的传感器框 ...
- 关于Android 传感器坐标与读数的进一步讨论
关于Android 传感器坐标与读数的进一步讨论 之前一些相关的讨论见: Android Sensors (3) 传感器坐标系统 Android Sensors (5) 运动传感器 Motion Se ...
- android 传感器 balance filter,Android 传感器 API.doc
Android 传感器 API 1.1 序言 ? ?[Android蛋蛋网]在这一章我们主要针对Android的传感器(Sensor)进行说明.如果说Java的程序和硬件有些远的感觉,那么可以说传感器 ...
- Android传感器编程入门(三)
上接<Android传感器编程入门(二)> 三.实例:窈窈录音器 通过上面的例子我们学会了如何获得某种类型的传感器,下面我通过一个实例来学会如何使用某一个类型的传感器.我们这里使用加速度传 ...
- android传感器_Android传感器
android传感器 In this tutorial, we'll be digging deep into the world of Android Sensors. Our smartphone ...
最新文章
- shell快速将同一名称的不同类型文件自动划分到一个文件中
- Laravel+nginx环境配置好后,url加参数提交报404错误
- pythonapi是什么意思_python api是什么
- linux 磁盘被挂载2个目录,Linux检测并挂载第二块硬盘的步骤
- 数据增长率怎么算_2019 年“泰迪杯”数据分析职业技能大赛A题 超市销售数据分析...
- 如何在Java中将字节数组转换为十六进制字符串?
- 考研复习(2)链表操作
- linux禁用ssh弱加密算法,SSHSSL弱加密算法漏洞修复
- linux查看php执行用户,在浏览器中打开php文件时,是Linux中的哪个用户执行的?...
- weblogic 找不到数据源问题
- Web前端第三季(JavaScript):十一:第3章: 字符串和对象:309-如何创建对象+310-如何创建构造函数+311-给对象添加普通函数和对象属性的遍历
- windows 安装 dnw、fastboot 驱动的时候遇到问题(数字签名)
- 我行我素购物管理系统(面向对象)
- java.sql.SQLException: Parameter index out of range (2 」 number of parameters, which is 1).
- [视频教程]MAME画质优化hq3x
- (POJ - 2251)Dungeon Master(bfs)
- iptables使用limit控制新建连接速率
- matlab弹幕抓取,B站某视频弹幕抓取
- java eai_java与vrml在EAI接口下的配置!!成功!!!
- Elyse Alexander - Unplanned Song WA47电子管麦克风