android重力传感器

使用背景:拍照后相机要求把照片摆正,不论手机拍摄时旋转成什么样子,始终能从照片的方向中,选出较合适的方向作为图片方向来存储图片。

1:使用方向判断时用了加速度传感器

这里写图片描述
假设这个是手机屏幕,红色代表设备上边,黄色下边,蓝左绿右。

若黄边贴在地面把设备与桌面垂直,则y值约为9.8(重力加速度,下同),红边贴地面,把设备与桌面垂直,y约为-9.8,通过这个,可以判断设备是正是倒的,也就是旋转0度还是180。

若蓝边贴在地面把设备与桌面垂直,x值约为9.8,反之,绿边贴桌,x约为-9.8,通过这个我们可以判断设备翻转了90度或270度

屏向上,z值约9.8,屏向下,z值约-9.8.这个,就我做的拍照功能而言,没什么用,现在都两个摄像头了,很少有人把手机横着这样拍,尤其是横着还翻过来,这个可以不调整方向。

2:判断是否进行摇一摇用了加速度传感器
另外,加速度传感器还可用于判断是否进行摇一摇:

这段代码来自:http://moto0421.iteye.com/blog/1243423

 public void onSensorChanged(SensorEvent event) {  
        long currentTime = System.currentTimeMillis();  
        long diffTime = currentTime - mLastUpdateTime;  
        if (diffTime < UPDATE_INTERVAL)  
            return;  
        mLastUpdateTime = currentTime;  
        float x = event.values[0];  
        float y = event.values[1];  
        float z = event.values[2];  
        float deltaX = x - mLastX;  
        float deltaY = y - mLastY;  
        float deltaZ = z - mLastZ;  
        mLastX = x;  
        mLastY = y;  
        mLastZ = z;  
        float delta = FloatMath.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ  
                * deltaZ)  
                / diffTime * 10000;  
        if (delta > shakeThreshold) { // 当加速度的差值大于指定的阈值,认为这是一个摇晃  
            this.notifyListeners();  
        }  
    }  

我的理解是,x,y,z是三坐标方向上的加速度,deltaX,deltaY,deltaZ是在三坐标方向上变化的加速度,delta是某段时间内的两点距离的加速度变化平均值,如果加速度变化超过某个值,则认为进行了一次静止到加速或加速到静止的过程,及认为进行了摇晃。

猜你喜欢

转载自blog.csdn.net/yu_duan_hun/article/details/80664219