1. 新建BaseActivity类

由于传感器较多,新建一个BaseActivity封装属性和方法:

package com.example.gingerbread;import java.util.List;import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.TextView;public class BaseActivity extends Activity implements SensorEventListener {public TextView tx1;public TextView tx2;public float[] angle = new float[3];public long lastTime;public SensorManager sm;public String content;private OnChangeListener onChangeListener;private Sensor acceleromererSensor;public List<Sensor> initSensorS() {//获取手机所有的传感器sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);return sm.getSensorList(Sensor.TYPE_ALL);}public void initSensor(Context ctx, int type) {//根据传入的传感器类型初始化传感器sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);acceleromererSensor = sm.getDefaultSensor(type);// //注册传感器,第一个参数为距离监听器,第二个是传感器类型,第三个是获取数据速度sm.registerListener(this, acceleromererSensor,SensorManager.SENSOR_DELAY_NORMAL);}public static interface OnChangeListener {public void onAccuracyChanged2(Sensor sensor, int accuracy);public void onSensorChanged2(SensorEvent event);}public final void setOnChangeListener(OnChangeListener listener) {onChangeListener = listener;}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (sm != null) {//理解为取消这个事件监听实现注销传感器sm.unregisterListener(this);}}// 向量求模public double magnitude(float x, float y, float z) {double magnitude = 0;magnitude = Math.sqrt(x * x + y * y + z * z);return magnitude;}@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubonChangeListener.onSensorChanged2(event);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub// 精度发生改变// 什么也不干onChangeListener.onAccuracyChanged2(sensor, accuracy);}
}

2.方向传感器:

  • 新建activity
public class DirectionActivity extends BaseActivity implements OnChangeListener
  • 初始化UI和传感器
setContentView(R.layout.activity_main);tx2 = (TextView) findViewById(R.id.TextView02);tx1 = (TextView) findViewById(R.id.TextView01);// 系统设置的重力加速度标准值,设备在水平静止的情况下就承受这个压力,所以默认Y轴方向的加速度值为STANDARD_GRAVITYinitSensor(this, Sensor.TYPE_ORIENTATION);setOnChangeListener(this);
  1. 主体:传感器数据处理
/*** 第一个角度:Azimuth (degrees of rotation around the z axis).* * 表示手机自身的y轴与地磁场北极方向的角度,即手机顶部朝向与正北方向的角度。* * * 当手机绕着自身的z轴旋转时,该角度值将发生改变。* * 例如该角度值为0时,表示手机顶部指向正北;该角度为90度时,代表手机顶部指向正东;该角度为180度时,代表手机顶部指向正南;* 该角度为270度时,代表手机顶部指向正西。* * * * 第二个角度:Pitch (degrees of rotation around the x axis).* * 表示手机顶部或尾部翘起的角度。* * 当手机绕着自身的x轴旋转,该角度会发生变化,值的范围是-180到180度。* * 绕着X轴顺时针旋转时,该角度是负值;* * 绕着X轴逆时针旋转时,该角度是正值。* * 假设将手机屏幕朝上水平放在桌子上,如果桌子是完全水平的,该角度应该是0。* * * * 第三个角度:Roll (degrees of rotation around the y axis).* * 表示手机左侧或右侧翘起的角度。* * 当手机绕着自身Y轴旋转时,该角度值将会发生变化,取值范围是-90到90度。* * 绕着Y轴顺时针旋转时,该角度是负值;* * 绕着Y轴逆时针旋转时,该角度是正值。*/
long currentTime = System.currentTimeMillis();// 没100毫秒取一次距离if (currentTime - lastTime < 100)return;lastTime = currentTime;// if (timestamp != 0) {// final float dT = (event.timestamp - timestamp) * NS2S;// angle[0] = event.values[0] * dT * 100;// angle[1] = event.values[1] * dT * 100;// angle[2] = event.values[2] * dT * 100;// }timestamp = event.timestamp;angle[0] = event.values[0];angle[1] = event.values[1];angle[2] = event.values[2];content = String.format("Azimuth :%8.4f , Pitch :%8.4f , Roll :%8.4f",angle[0], angle[1], angle[2]);tx2.setText(content);tx1.setText(timestamp + "");

Demo下载:gingerbread
相关链接:我的Android开发相关文章

Android传感器(三):方向传感器相关推荐

  1. Android传感器之-方向传感器Orientation功能实现与源码

    先明确一下空间坐标系的三个方向: x 方向就是手机的水平方向,右为正: y 方向就是手机的水平垂直方向,前为正: z 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负. 方向角的定义是手机y ...

  2. Android 传感器之方向传感器

    一般情况下,在android系统中获取手机的方位信息在api中有TYPE_ORIENTATION常量,可以像得到加速度传感器那样得到方向传感器sm.getDefaultSensor(Sensor.TY ...

  3. android系统重力感应传感器 方向控制与方向切换,android sensor orientation 方向传感器 重力感应...

    首先,获取方向传感器(参照http://developer.android.com/reference/android/hardware/SensorManager.html): publicclas ...

  4. Android实例-OrientationSensor方向传感器(XE8+小米2)

    相关资料: <修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题>:http://www.cnblogs.com/onechen/p/4497282. ...

  5. Android 利用方向传感器获得手机的相对角度

    1.android 的坐标系是如何定义x, y z 轴的. x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置. Y轴的方向是从屏幕的左下角开始 ...

  6. android传感器获取运动方向,Android开发者指南-运动传感器Motion Sensor[原创译文]...

    Android 平台支持很多监测设备运动的传感器.其中有两个传感器一定是基于硬件的(加速度计和陀螺仪),有三个可能基于硬件或软件(重力计.线性加速计和旋转向量传感器). 比如,某些设备的软传感器利用加 ...

  7. Android利用方向传感器获得手机的相对角度实例说明

    1.android 的坐标系是如何定义x, y z 轴的 x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置. Y轴的方向是从屏幕的左下角开始沿 ...

  8. android 方向sensor,Android开发者指南-方位传感器-Position Sensor[原创译文]

    Android 平台提供了两种传感器来检测设备的方位:地磁传感器和方向传感器. Android 平台还提供了一种传感器,用于检测屏幕表面与其它物体的邻近程度,即被称为距离传感器. 地磁传感器和距离传感 ...

  9. Android笔记 方向传感器

    1传感器概念 图片资源来自传智播客张泽华视频114集 demo 1布局一张图片 网上随便找一张指南针图片 <RelativeLayout xmlns:android="http://s ...

  10. Android 方向传感器与磁力计和加速度传感器之间的关系

    一般情况下,在android系统中获取手机的方位信息azimuth似乎是很简单的事情,在api中有TYPE_ORIENTATION常量,可以像得到加速度传感器那样得到方向传感器sm.getDefaul ...

最新文章

  1. ***和******
  2. python好难找工作_Python 太难找工作了
  3. 简单的计算机试题,这么简单的MS Office试题基础,一般人都不好意思看!
  4. 迷宫寻路系列常用算法逻辑探究
  5. matlab去趋势,[转载]使用Matlab对数据进行去趋势(detrend)
  6. 刘强东成京东数科二股东;高通再诉苹果;金立否认裁定破产 | 极客头条
  7. node.js Web实时消息后台服务器推送技术---GoEasy
  8. SQLite 之 C#版 System.Data.SQLite 使用
  9. 网站SQL注入漏洞检测
  10. 解决Google Earth谷歌地球无法连接服务器问题
  11. Excel基本操作方法
  12. Justinmind6.X软件及汉化包下载地址
  13. 保险丝的作用原理及选择
  14. 寻找100以内的质数
  15. 电源正极电流检测:差分放大器与电流传感器放大器的对比
  16. 语音朗读html的源码,在网页上通过JS实现文本的语音朗读
  17. Verilog中reg和SystemVerilog中logic的区别
  18. 小学如何开展创客教育教学工作
  19. 淘宝店铺订单交易接口/淘宝店铺商品上传接口/淘宝店铺订单解密接口/淘宝店铺订单明文接口/淘宝店铺订单插旗接口代码对接分享
  20. STM32外挂FLASH模拟U盘(基于HAL库)

热门文章

  1. 自己为什么活着,活着的意义是什么?
  2. linux磁盘空间不释放问题排查
  3. component: resolve = require(['@/view/index.vue'], resolve) 与component: index区别
  4. yii2框架教程 入门篇(一)
  5. Logical Architecture
  6. Java中的i=i+1和i+=1以及i++和++i详解
  7. 【Linux】软件包管理器yum和编辑器vim(内附动图)
  8. 多传感器融合定位三-3D激光里程计其三:点云畸变补偿
  9. Array.of()
  10. 量化交易接口怎么自动选股票?