由于andorid不推荐用传统的方向传感器,推荐用加速度传感器和地磁传感器来构造得到方向传感器的数据,其实主要是z轴的旋转角度。代码如下:

public class MainActivity extends Activity {private ImageView compass;private SensorManager sensorManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);compass = (ImageView) findViewById(R.id.compass);sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);Sensor AccelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);sensorManager.registerListener(sensorEventListener,magneticSensor,SensorManager.SENSOR_DELAY_GAME);sensorManager.registerListener(sensorEventListener,AccelerometerSensor,SensorManager.SENSOR_DELAY_GAME);}private SensorEventListener sensorEventListener = new SensorEventListener() {float[] accelerometerValues = new float[3];float[] maneticValues = new float[3];private float lastDegree;@Overridepublic void onSensorChanged(SensorEvent sensorEvent) {if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER){accelerometerValues = sensorEvent.values.clone();}else if (sensorEvent.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){maneticValues = sensorEvent.values.clone();}float[] R = new float[9];float[] values = new float[3];SensorManager.getRotationMatrix(R,null,accelerometerValues,maneticValues);SensorManager.getOrientation(R,values);
            //获取方向角度,可根据需要进行应用float rotateDegree = -(float) Math.toDegrees(values[0]);if (Math.abs(rotateDegree - lastDegree) > 1){RotateAnimation animation = new RotateAnimation(lastDegree,rotateDegree, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);animation.setFillAfter(true);compass.startAnimation(animation);lastDegree = rotateDegree;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int i) {}};@Overrideprotected void onDestroy() {if (sensorManager != null){sensorManager.unregisterListener(sensorEventListener);}super.onDestroy();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}

Android指南针之加速度传感器地磁传感器相关推荐

  1. Android指南针之加速度传感器地磁传感器-android学习之旅(67)

    由于andorid不推荐用传统的方向传感器,推荐用加速度传感器和地磁传感器来构造得到方向传感器的数据,其实主要是z轴的旋转角度 具体代码示例 代码如下 public class MainActivit ...

  2. 博世传感器调试笔记(三)加速度及地磁传感器BMC156

    一.    器件简介: 1.    BMC 156是一款整合三轴地磁传感器与三轴(12bit)加速度传感器于一体的传感器,以BMC 150 电子罗盘模块为基础, 并与Bosch Sensortec 2 ...

  3. 传感器之方向:使用加速度传感器和地磁传感器共同实现

    布局很简单: activity: /*** 方向加速度:使用加速度传感器和地磁传感器共同实现.* 此模拟简易指南针功能.*/public class ActOrientationSensor exte ...

  4. Android GPS及地磁传感器 API

    Android 提供的位置包括经纬度和时间戳,可选地包含高度和方位,高度以WGS84椭球体为参照,方位以真北为参考. 地磁传感器以磁北为北.有2种传感器可提供方位信息:地磁场(Geomagnetic) ...

  5. android 三轴加速度传感器【转】

    一.手机中常用的传感器 在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用,具体如下:(Sensor类) #define SENSOR_TYPE_ACCE ...

  6. 传感器--方向传感器制作指南针

    我们根据地磁传感器和加速度传感器来进行当前手机旋转的方向 同时使用一个imageView来展示我们当前的方向的展示,并让其根据手机旋转的角度来旋转指向正确的方向 public class MainAc ...

  7. 高通AKM8975地磁传感器分析

    1. 概述 地磁使用的是AKM8975地磁传感器,其kernel部分的驱动代码路径是\kernel\drivers\ misc\akm8975.c,android的HAL层的路径是qics1003\h ...

  8. 传感器系列之4.7地磁传感器

    4.7地磁传感实验 一.实验目的 1.掌握LPC2378芯片的编程方法 2. 掌握地磁传感器的工作原理 3. 掌握地磁传感器的使用流程 二.实验材料 1.具有USB 串口通讯的PC 机1 台 2.AD ...

  9. android开发笔记之高级主题—传感器的简单介绍

    今天我们开始进入讲解android中的一些高级主题的用法,比如传感器.GPS.NFC.语音和人脸识别等. 这次来对传感器的一个简单介绍: Android平台支持三大类的传感器: 位移传感器 这些传感器 ...

最新文章

  1. iframe 自动适应高和宽问题 和 其他Frame操作技巧
  2. 模式设计概述:反应器(Reactor)模式
  3. 从宇宙、互联网和脑的关系看元宇宙的终极形态
  4. 不讲武德,拿到户口后立马辞职...
  5. 立即终止Sleep的线程
  6. Ubuntu16.04安装jdk8
  7. 【redismemcached】数据类型、内存管理、数据持久化和集群管理的区别
  8. 2020牛客多校2 - Exclusive OR(FWT)
  9. how to deal with error message Failed to create note
  10. GeneralUpdate20220323里程碑版本发布
  11. c#中常用集合类和集合接口之接口系列【转】
  12. java mysql jsp分页代码_JAVA/JSP学习系列之六(MySQL翻页例子)
  13. 【转载】关联分析中的支持度、置信度和提升度
  14. charles请求转发_Charles安装与基本操作
  15. 在 Vs2013中查看类的内部布局
  16. 2021运营App推广必备的几款工具
  17. HBase CURD之Put
  18. JAVA-day09-多线程
  19. 树莓派3 Android Pie 编译适配
  20. c语言在bmp图片上写字的函数,在bmp上写字

热门文章

  1. ios8在通用设置中文键盘无效的解决方法(中文键盘设置)
  2. Latex报错:找不到 citesort.sty
  3. UTM——统一威胁管理
  4. MySQLSyntaxErrorException sql语句语法错误
  5. MySQL 空间分析函数
  6. java的面向抽象原则
  7. PTA 7-2 复数计算
  8. PyQt5适配高分屏的方法
  9. 基于Python回归模型的异方差性分析
  10. 违背基本假设的几种情况——异方差性(R语言)