本文源码: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-传感器-实现记录人行走的轨迹相关推荐

  1. 《Android传感器开发与智能设备案例实战》——导读

    本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的目录,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 ...

  2. 《Android传感器开发与智能设备案例实战》——第2章,第2.4节安装ADT

    本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的第2章,第2.4节安装ADT,作者 朱元波,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  3. 【转】深入探讨 Android 传感器

    Android 是一个面向应用程序开发的富平台,它拥有许多具有吸引力的用户界面元素和数据管理功能.Android 还提供了一组丰富的接口选项.在本文中,学习如何配合使用 Android 的各种传感器选 ...

  4. 《Android传感器开发与智能设备案例实战》——第1章,第1.2节Android的巨大优势...

    本节书摘来自异步社区<Android传感器开发与智能设备案例实战>一书中的第1章,第1.2节Android的巨大优势,作者 朱元波,更多章节内容可以访问云栖社区"异步社区&quo ...

  5. Android传感器-开发指南

    大部分Android平台的设备都带有多个传感器,使你能监视其方位和运动状态的变化.很多设备还有其它类型的传感器,让你能感知周围的环境条件,比如温度.压力.湿度和光线.你可以利用Android的传感器框 ...

  6. 关于Android 传感器坐标与读数的进一步讨论

    关于Android 传感器坐标与读数的进一步讨论 之前一些相关的讨论见: Android Sensors (3) 传感器坐标系统 Android Sensors (5) 运动传感器 Motion Se ...

  7. android 传感器 balance filter,Android 传感器 API.doc

    Android 传感器 API 1.1 序言 ? ?[Android蛋蛋网]在这一章我们主要针对Android的传感器(Sensor)进行说明.如果说Java的程序和硬件有些远的感觉,那么可以说传感器 ...

  8. Android传感器编程入门(三)

    上接<Android传感器编程入门(二)> 三.实例:窈窈录音器 通过上面的例子我们学会了如何获得某种类型的传感器,下面我通过一个实例来学会如何使用某一个类型的传感器.我们这里使用加速度传 ...

  9. android传感器_Android传感器

    android传感器 In this tutorial, we'll be digging deep into the world of Android Sensors. Our smartphone ...

最新文章

  1. shell快速将同一名称的不同类型文件自动划分到一个文件中
  2. Laravel+nginx环境配置好后,url加参数提交报404错误
  3. pythonapi是什么意思_python api是什么
  4. linux 磁盘被挂载2个目录,Linux检测并挂载第二块硬盘的步骤
  5. 数据增长率怎么算_2019 年“泰迪杯”数据分析职业技能大赛A题 超市销售数据分析...
  6. 如何在Java中将字节数组转换为十六进制字符串?
  7. 考研复习(2)链表操作
  8. linux禁用ssh弱加密算法,SSHSSL弱加密算法漏洞修复
  9. linux查看php执行用户,在浏览器中打开php文件时,是Linux中的哪个用户执行的?...
  10. weblogic 找不到数据源问题
  11. Web前端第三季(JavaScript):十一:第3章: 字符串和对象:309-如何创建对象+310-如何创建构造函数+311-给对象添加普通函数和对象属性的遍历
  12. windows 安装 dnw、fastboot 驱动的时候遇到问题(数字签名)
  13. 我行我素购物管理系统(面向对象)
  14. java.sql.SQLException: Parameter index out of range (2 」 number of parameters, which is 1).
  15. [视频教程]MAME画质优化hq3x
  16. (POJ - 2251)Dungeon Master(bfs)
  17. iptables使用limit控制新建连接速率
  18. matlab弹幕抓取,B站某视频弹幕抓取
  19. java eai_java与vrml在EAI接口下的配置!!成功!!!
  20. Elyse Alexander - Unplanned Song WA47电子管麦克风

热门文章

  1. html记录文章页等页面点击数,在HTML页面中实现点击数统计
  2. 蓝桥杯——基础练习 十六进制转八进制
  3. 【解决】Teamviewer登陆激活验证等问题
  4. 金融行业密钥体系相关知识及原理介绍
  5. 天津理工大学计算机网络复习
  6. 我崩溃了!说一下springboot启动时的自动装配过程,大厂直通车!
  7. html中ui的意思,WebUI是什么意思
  8. 【非广告,纯干货】这大概是我看过最有温度的面经分享(已收割京东美团技术专家offer)...
  9. 地质学类比较有名的外文期刊有哪些?
  10. JVM调优(一)底层原理分析和问题定位