Android 指南针校正
指南针
关于指南针的实现,网上已经有很多的文章了,简单搜一下都能看懂,原理都一样,要使用Android系统的传感器实现,我们先简单看一下指南针的实现过程。
指南针的实现
1.传感器
实现指南针需要的传感器可以分为两种,一种是屏幕方向传感器,但是已经被Google 标记为了 @Deprecated。
@Deprecated
public static final int TYPE_ORIENTATION = 3;`
另一种比较新的方式,需要两个传感器配合,分别为加速度传感器和磁场传感器,我们主要说一下这种方式的实现。
public static final int TYPE_ACCELEROMETER = 1;
public static final int TYPE_MAGNETIC_FIELD = 2;
2.获取传感器
首先我们需要获取到这两个传感器,记得做判空操作。
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
3.订阅监听
接下来订阅对这两个传感器的监听:
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, magneticField, SensorManager.SENSOR_DELAY_NORMAL);
自定义监听实现接口:SensorEventListener ,这个接口有两个方法,分别是:
public void onSensorChanged(SensorEvent event);
public void onAccuracyChanged(Sensor sensor, int accuracy);
关于他们的作用,看一下接口里的注释,写的非常详细,顺便提一嘴,他们写的注释真是长,但是这真的是一个好习惯,对自己也是一个很好的提升的过程。
4.数据处理
最后就是对数据的处理了,通过用SDK中给出API对传感器返回数据的处理,就能获得当前的方向,这段代码我就直接贴出来吧,
float[] R = new float[9];if (SensorManager.getRotationMatrix(R, null, accelerValues, magneticFieldValues)) {float[] orientation = new float[3];SensorManager.getOrientation(R, orientation);float direction = (float) Math.toDegrees(orientation[0]) * -1.0f;} else {Log.d("Compass", "Error: SensorManager.getRotationMatrix");}
到此为止,你就得到了指南针所需要的全部数据了,然后用这个数据去驱动一个Imageview + 动画,指南针就实现了。
指南针的校准
初步实现完了指南针,但是,转着转着,发现不准了角度,一看监听返回的数据也不准了,这时就需要来校准指南针了,具体的做法是什么呢,那就是拿手机画8,
那什么时候需要校准呢,怎么判断呢?这就用到上面监听返回的参数了accuracy:
@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {Log.d("TAG", "onAccuracyChanged: :" +accuracy);}
那么什么时候校验呢,看一下注释,分了5个级别,分别是:
public static final int SENSOR_STATUS_NO_CONTACT = -1;
public static final int SENSOR_STATUS_UNRELIABLE = 0;
public static final int SENSOR_STATUS_ACCURACY_LOW = 1;
/*** This sensor is reporting data with an average level of accuracy,* calibration with the environment may improve the readings*/
public static final int SENSOR_STATUS_ACCURACY_MEDIUM = 2;
/** This sensor is reporting data with maximum accuracy */
public static final int SENSOR_STATUS_ACCURACY_HIGH = 3;
那么我们就可以知道,精度小于3个都不可信
if (accuracy >= SensorManager.SENSOR_STATUS_ACCURACY_HIGH ) {Log.e("Compass", " 不需要校验");} else {Log.e("Compass", " 需要校准 "); }
至此,指南针的基本实现,校准的标准判断,就都有了,赶紧实现以下吧。
Android 指南针校正相关推荐
- android指南针功能,轻松实现Android指南针功能
本文实例为大家讲解如何轻松实现Android指南针功能,分享给大家供大家参考.具体如下: (1)布局文件如下: android:layout_width="fill_parent" ...
- android 指南针传感器,android 传感器使用 Compass指南针的实现功能
以下是指南针通过方向传感器而旋转实现. CompassDemo.java: package com.example.activity;import android.app.Activity;impor ...
- android指南针校准 代码_Android指南针app的实现原理总结
要想实现指南针功能,其实主要就是获取手机的方位,通过对比前一刻方位和现在手机方位算出手机旋转的角度,然后根据手机实际旋转的角度去旋转指南针的imageview.关键在于如何获取手机实际方位. 那么如何 ...
- android指南针校准 代码_android 指南针app源码(亲测可用)
[实例简介] [实例截图] [核心代码] package cn.icast.zhinanzhen; import android.app.Activity; import android.conten ...
- android 指南针不稳定,Android指南针方向不可靠(低通滤波器)
虽然我没有在Android上使用指南针,但下面显示的基本处理(在JavaScript中)可能适用于您. 它基于加速度计上的低通滤波器,它是由Windows Phone team推荐的,适用于罗盘(每3 ...
- Android指南针代码示例
今天,我将分享一个有效的代码,为您的android设备制作一个非常简单的罗盘应用程序. 某些android设备(例如Huawei Y300和Lenovo P700i)不完全支持运动传感器,因此该代码不 ...
- Android指南针陀螺仪开发
Android完整指南针demo,主要两个类,一个指南针旋转动画类,一个指南针界面类 先上效果图,如下 1.动画类 2.界面类 以上代码有参考网络上的文章,确实太久远,找不到出处了,还请大神们见谅. ...
- arcgis android 指南针,Arcgis runtime for Android 100.5 (六) 自定义指南针
Arcgis没有提供指南针控件,如果需要,可以自定义一个,很简单 去阿里图标库下载一个能用的指南针如 指南针 放置在布局文件中 xmlns:fab="http://schemas.andro ...
- Android指南针应用
目的:通过指南针应用来学习SensorManager.LocationManger的使用以及对android 6.0动态权限的适配 一.通过android的方向传感器获取手机方位 通过对比前一刻方位和 ...
- Android 指南针
开发指南针思路很简单:准备一张指南针图片,该图片上方向指针指向北方.接下来开发一个检测方向的传感器,程序检测到手机顶部绕Z轴转过多少度,让指南针图片反向转过多少度即可. 程序代码: package o ...
最新文章
- windows 下使用composer
- C#开发ActiveX网页截图控件
- Android自带的图标集合
- 风控建模 python 知乎_风控建模基本要求及面试问题小结
- 马斯克又开始了,喋喋不休,吊足大家胃口
- 【clickhouse】clickhouse 漫谈SIMD、SSE指令集与ClickHouse向量化执行
- python字典有序还是无序_python--基础语法
- 二级C语言考试环境注意事项
- PS的30个实用技巧大全
- 监控摄像机镜头角度和距离计算表
- Codeforces718 C. Sasha and Array(线段树维护矩阵,矩阵快速幂求斐波那契数列,矩阵乘法结合律)
- 指纹识别技术未来发展趋势
- Python面向对象编程——类的学习
- 华为智慧屏 SE55
- 排序方法基本介绍(1)
- 微信小程序开发——上课摇号系统的开发
- Kettle 3.2 连接 SQL Server 2008
- 散文说python半篇——景观三元论与盖茨比的对话
- 2022年中国第三方支付市场专题分析
- WIN10系统下提示文件被另外一个程序打开无法重命名、删除、移动的解决方法