public void onSensorChanged( SensorEvent event ) {
// If we don't have a Location, we break out
if ( LocationObj == null ) return;
float azimuth = event.values[0];
float baseAzimuth = azimuth;
GeomagneticField geoField = new GeomagneticField( Double
.valueOf( LocationObj.getLatitude() ).floatValue(), Double
.valueOf( LocationObj.getLongitude() ).floatValue(),
Double.valueOf( LocationObj.getAltitude() ).floatValue(),
System.currentTimeMillis() );
azimuth -= geoField.getDeclination(); // converts magnetic north into true north
// Store the bearingTo in the bearTo variable
float bearTo = LocationObj.bearingTo( destinationObj );
// If the bearTo is smaller than 0, add 360 to get the rotation clockwise.
if (bearTo < 0) {
bearTo = bearTo + 360;
}
//This is where we choose to point it
float direction = bearTo - azimuth;
// If the direction is smaller than 0, add 360 to get the rotation clockwise.
if (direction < 0) {
direction = direction + 360;
}
rotateImageView( arrow, R.drawable.arrow, direction );
//Set the field
String bearingText = "N";
if ( (360 >= baseAzimuth && baseAzimuth >= 337.5) || (0 <= baseAzimuth && baseAzimuth <= 22.5) ) bearingText = "N";
else if (baseAzimuth > 22.5 && baseAzimuth < 67.5) bearingText = "NE";
else if (baseAzimuth >= 67.5 && baseAzimuth <= 112.5) bearingText = "E";
else if (baseAzimuth > 112.5 && baseAzimuth < 157.5) bearingText = "SE";
else if (baseAzimuth >= 157.5 && baseAzimuth <= 202.5) bearingText = "S";
else if (baseAzimuth > 202.5 && baseAzimuth < 247.5) bearingText = "SW";
else if (baseAzimuth >= 247.5 && baseAzimuth <= 292.5) bearingText = "W";
else if (baseAzimuth > 292.5 && baseAzimuth < 337.5) bearingText = "NW";
else bearingText = "?";
fieldBearing.setText(bearingText);
}
PS,用这种方式,如果手机的方向和移动的方向不一致,那就会不准。
分享到:
相关推荐
在iOS开发中,实现“背景根据重力感应动”的效果主要涉及到硬件传感器的使用,特别是重力感应器(Gravity Sensor)以及UIKit框架中的相关技术。重力感应器是一种能够检测设备在三维空间中的倾斜和旋转的传感器,它...
该压缩包文件“Android高级应用源码-Android重力感应跑步测速应用.rar”提供了一个基于Android平台的高级应用示例,它利用设备的重力感应器来实现跑步时的速度测量功能。通过分析这个源码,我们可以深入学习Android...
在Android平台上,感应器(Sensor)是设备与周围环境交互的关键组件。加速度传感器和方向传感器是其中两类常见的传感器,广泛应用于移动设备中,提供设备的动态运动信息和朝向变化。本文将深入探讨这两类传感器的...
在手机中,尽管常被称为重力感应器,但实际上它能探测到更广泛的加速度变化,如设备的移动和振动。加速度传感器使得手机可以响应用户的手势操作,如摇晃手机进行刷新等。 3. **方向感应器(O-sensor)** 方向感应...
1、单角度倾斜指示标签内设重力感应器及左右两固定角度边坡,当包装倾斜角度超过角度边坡时,重力感应器在重力作用下不可逆的滚出角度边坡,露出与重力感应器不同的背景颜色,从而达到指示倾斜角度的效果。...
它通常需要用户摇晃手机来确保准确测量。这种传感器在指南针和地图导航等应用中非常常见,可以帮助用户确定方位。 #### 6. 陀螺仪(Gyroscope) 陀螺仪可以测量物体沿一个或多个轴的旋转速率,是一种重要的惯性...
此外,还有一些综合类型传感器,如重力感应器、线性加速度传感器、旋转矢量传感器等,它们都是通过结合多种传感器的原理和技术实现的。这些综合类型传感器可以提供更多的信息和更高的精度,从而满足各种应用需求。
窨井盖移动智能监控报警装置通过内置的物联网传感器,如位置感应器、重力感应器和振动感应器,实现对窨井盖的全方位监控。这些传感器能够连续收集数据,并对数据进行实时分析。如果井盖发生异常移动或振动,系统会...
常见的Android传感器包括运动传感器(如加速计、陀螺仪、重力感应器)、环境传感器(如气压计、温度计、光度计)和位置传感器(如方位传感器、磁强计)。在手机应用中,传感器的应用非常广泛,例如,重力感应器可以...
1. 技术原理:防盗报警器通常基于传感器技术,如红外线、重力感应或磁性感应等,当笔记本电脑受到非法移动或试图打开时,传感器会触发报警系统。同时,一些高级系统还会结合蓝牙或Wi-Fi技术,通过手机应用程序进行...
它提供了高效、流畅的全景图显示,支持重力感应等传感器数据,使得用户可以通过移动设备来体验全景视觉效果。 一、Android三维全景图片基础 全景图片是一种特殊的图像格式,通过拼接多张2D照片,形成一个360度全...
该方法利用重力加速度计与磁通门磁强计这两种传感器来实现对物体空间姿态的精确测量,并以此为基础实现对物体空间移动轨迹的检测。 #### 关键技术点 1. **传感器的选择与配置**:采用三个相互垂直的重力加速度计...
- 重力感应、陀螺仪等传感器使用方法 - GPS与网络定位服务API - 地图服务集成(如Google Maps API) 8. **在线支付功能实现** - 第三方支付平台接入(如支付宝、微信支付) - 安全性考虑与实现方案 9. **性能...
另外,除了`SensorManager.getOrientation()`,还有一种较旧的方式是直接通过方向感应器获取数据,这种方式得到的数据范围通常是0到360度,但这种方法可能会在未来被淘汰,因为它不使用旋转矩阵,可能在准确性上不如...
在移动设备上实现指南针功能,关键在于利用设备中的方向传感器,如磁力传感器(磁感应器)和加速度传感器。下面我们将深入探讨Android指南针的工作原理、开发过程以及相关技术点。 1. **传感器基础** 手机中的...
然后结合重力传感器数据修正因设备倾斜导致的误差。 5. 更新UI:将计算出的方向角转换成角度,更新指南针UI,使指针指向正确的方向。 6. 注销传感器监听:在不再需要指南针功能时,别忘了通过`SensorManager....
不仅如此,这款iPhone还内置了数字指南针、GPS导航、重力感应和光线感应等传感器,使手机不仅仅是一个通讯工具,更是一个生活伴侣。 娱乐功能是这款iPhone的另一大亮点。其支持多种格式的视频和音频播放,为用户...
- **重力感应器**:检测设备的方向和倾斜角度。 - **光线感应器**:根据环境光强度调整屏幕亮度。 - **方向感应器**:测量设备的方位角。 **13. 适配多屏幕** - **屏幕尺寸**:根据屏幕的物理尺寸进行分类。 - **...
随着移动设备性能的不断提升与应用场景的日益丰富,传感器在智能手机中的作用愈发重要。本文将对Android操作系统支持的11种传感器进行详细介绍,包括加速度传感器、磁力传感器、方向传感器、陀螺仪传感器、光线感应...