`

简单说说Android G-sensor 的优化

 
阅读更多

近期在2.2中解决某个G-sensor的Bug的时候,意外的发现2.3其实已经对这类问题进行了优化,借鉴于2.3的源码,给了我不少帮助。2.3中主要是扩展了对旋屏180°的扩展,这个也许对手机来说没什么实际作用,但是对于平板电脑,却意味深长喽!!!

首先是 int getCurrentRotation() ,不仅仅只针对mRotation ,还增加了对lastRotation的考究,单单就是这点,就方便了我们做很多事情,可以很方便的增加很多判断和条件,来达到我们想要实现的目的。代码如下:

int getCurrentRotation(int lastRotation) {
if (mTiltDistrust > 0) {
// we really don't know the current orientation, so trust what's currently displayed
mRotation = SURFACE_TO_INTERNAL_ROTATION[lastRotation];
}
return INTERNAL_TO_SURFACE_ROTATION[mRotation];
}

最值得一提的就是下面的代码了:

// Mapping our internal aliases into actual Surface rotation values
private static final int[] INTERNAL_TO_SURFACE_ROTATION = new int[] {
Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_270,
Surface.ROTATION_180};

// Mapping Surface rotation values to internal aliases.
private static final int[] SURFACE_TO_INTERNAL_ROTATION = new int[] {
ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270};

// Threshold ranges of orientation angle to transition into other orientation states.
// The first list is for transitions from ROTATION_0, ROTATION_90, ROTATION_270,
// and then ROTATION_180.
// ROTATE_TO defines the orientation each threshold range transitions to, and must be kept
// in sync with this.
// We generally transition about the halfway point between two states with a swing of 30
// degrees for hysteresis.
private static final int[][][] THRESHOLDS = new int[][][] {
{{60, 180}, {180, 300}},
{{0, 30}, {195, 315}, {315, 360}},
{{0, 45}, {45, 165}, {330, 360}},

// Handle situation where we are currently doing 180 rotation
// but that is no longer allowed.
{{0, 45}, {45, 135}, {135, 225}, {225, 315}, {315, 360}},
};
// See THRESHOLDS
private static final int[][] ROTATE_TO = new int[][] {
{ROTATION_90, ROTATION_270},
{ROTATION_0, ROTATION_270, ROTATION_0},
{ROTATION_0, ROTATION_90, ROTATION_0},
{ROTATION_0, ROTATION_90, ROTATION_0, ROTATION_270, ROTATION_0},
};

// Thresholds that allow all 4 orientations.
private static final int[][][] THRESHOLDS_WITH_180 = new int[][][] {
{{60, 165}, {165, 195}, {195, 300}},
{{0, 30}, {165, 195}, {195, 315}, {315, 360}},
{{0, 45}, {45, 165}, {165, 195}, {330, 360}},
{{0, 45}, {45, 135}, {225, 315}, {315, 360}},
};
// See THRESHOLDS_WITH_180
private static final int[][] ROTATE_TO_WITH_180 = new int[][] {
{ROTATION_90, ROTATION_180, ROTATION_270},
{ROTATION_0, ROTATION_180, ROTATION_90, ROTATION_0},
{ROTATION_0, ROTATION_270, ROTATION_180, ROTATION_0},
{ROTATION_0, ROTATION_90, ROTATION_270, ROTATION_0},
};

注释写的清晰明了,我把它加入到2.2中,稍作修实现了我所想实现的目标,让G-sensor在某种特殊情况x,y,z 重定义N次得情况下,稳定工作。这还是要归功于,GOOGLE在x,y,z三维检测对0,90,180,270,4方向的支持。

另外,这也给大家提个醒,有什么没有解决的bug,不如看看高版本有没有进行优化和改变,也许会有意外收获~

分享到:
评论

相关推荐

    Android中G-Sensor相关流程

    Android 中 G-Sensor 相关流程 Android 中 G-Sensor 相关流程是指在 Android 系统中使用 G-Sensor 传感器的整个过程,从驱动程序的加载到应用程序的使用。下面将详细介绍 Android 中 G-Sensor 相关流程。 首先,在...

    g-sensor_driver_修改记录

    g-sensor_driver_修改记录,在android平台调试及优化g-sensor!!!

    G-Sensor Pro Android

    本文将深入探讨Android平台上的加速度传感器(G-Sensor)及其应用,同时,我们将介绍一款名为"G-Sensor Pro"的应用,它能实时记录和展示加速度数据,帮助开发者和用户更好地理解和利用这一功能。 首先,加速度...

    g-sensor资料

    【g-sensor资料】 g-sensor,也称为加速度传感器,是现代电子设备中常见的一种传感器,主要用于检测设备在三维空间中的线性加速度。它广泛应用于智能手机、平板电脑、智能手表等移动设备中,为用户提供运动追踪、...

    G-Sensor基本概念

    ### G-Sensor基本概念 随着Wii游戏主机的热销,电子产业也开始注意到MEMs(微机电系统)的应用及其市场需求。越来越多的产品需要加速度动能侦测技术,比如游戏主机。通过加入加速度动能侦测(G-Sensor)的功能,...

    g-sensor规格书资料

    g-sensor规格书资料中涉及的知识点可以从多个方面展开说明,包括g-sensor的基本概念、应用场景、特性描述、技术参数、接口协议等。 首先,g-sensor是指加速度传感器(Accelerometer),用于测量物体在空间中的加...

    G-sensor DA380.pdf

    MEMS数字输出运动传感器DA380 DA380是Micro-MEMS公司开发的一款高性能、低功耗、三轴加速度计,具有数字输出、I2C接口和14位分辨率。该传感器具有user selectable range(±2g、±4g、±8g、±16g)和数据输出率,...

    G-sensor mmc7660

    android G-sensor mc7660 driver

    加速度传感器_G-sensor_重力传感器(accelerometer)原理

    加速度传感器_G-sensor_重力传感器(accelerometer)原理

    linux驱动及g-sensor学习心得.doc

    Linux 驱动程序及 G-Sensor 学习心得 在学习 Linux 驱动程序和 G-Sensor 时,我们需要了解一些基本概念和技术。下面是根据提供的文件信息,总结的一些重要知识点: MODULE_INIT 和 MODULE_EXIT 在 Linux 驱动程序...

    Android-Orientation-Sensor,android传感器定向库使用所有可用的设备传感器,帮助您获得更精确的定向矢量值。.zip

    4. **API设计**:Android-Orientation-Sensor库通常会提供一套简单的API,让开发者可以轻松地在应用中集成定向计算。这些API可能包括启动和停止传感器监听、获取当前的设备方向等方法。 5. **性能优化**:为了确保...

    G-Sensor工作流程

    本文将深入剖析Android 4.2版本中G-Sensor的工作流程,包括SensorService如何创建和管理实例,以及数据从底层硬件到应用程序层的传输过程。 #### 二、SensorService的核心功能 SensorService的主要功能包括以下几...

    android GSensor 重力小球实例程序

    在Android平台上,GSensor,通常指的是加速度计,它能够检测设备在三维空间中的运动和重力变化。这个“android GSensor 重力小球实例程序”是一个教学项目,旨在帮助开发者理解如何利用GSensor的数据来实现游戏或者...

    g-sensor debug

    g-sensor debug ,用于Android手机,采集重力加速度传感器的数据。

    cesium-sensor-volumes.js, 适用于Cesium1.71.0

    适用于Cesium1.71.0,引入后即可渲染agi_conicSensor, agi_rectangularSensor, agi_customPatternSensor,agi_Vector等效果,直接引用即可import "/js/cesium-sensor-volumes

    htc g-sensor(C++)

    标题中的“htc g-sensor(C++)”指的是HTC手机上的加速度传感器API,它是用C++编程语言实现的。这个API允许开发者访问和利用设备的三轴加速度计数据,用于实现各种功能,比如游戏控制、屏幕自动旋转或者运动检测等。 ...

    Z-Sensor Monitor 官方安装文件_cc2530_zigbee2007_

    使用Z-Sensor Monitor,开发者可以有效地进行Zigbee网络的开发和维护工作,无论是新项目的启动,还是现有网络的优化,都能提供强大的支持。同时,对于初学者来说,通过实时监控和数据分析,能直观地理解Zigbee网络的...

Global site tag (gtag.js) - Google Analytics