Android Accelerometer在不同的设备上表现不同

时间:2015-07-09 05:15:25

标签: android accelerometer

所以我正在开发一款游戏,如果你向左倾斜设备,屏幕上的一个物体向左移动,如果你向右倾斜设备,屏幕上的物体向右移动。

我的所有设备(三星Galaxy S5,三星Galaxy 3平板电脑和中兴直通电话)都可以正常使用。但是我发布了一个测试版和我的一个朋友,他们有平板电脑;三星Galaxy 2 10英寸。在它上面,左右移动不起作用,但他必须上下倾斜它才能左右移动。看起来几乎就像传感器旋转一样。但是游戏被锁定在"肖像"位置。在某些设备上是否有可能传感器可能被旋转或以这样的方式实现,即向上和向下传播"左"向量被改变了?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,您需要在设置该对象的重力之前获取设备默认方向。

public int getDeviceDefaultOrientation() {

        WindowManager windowManager =  (WindowManager) getSystemService(WINDOW_SERVICE);

        Configuration config = getResources().getConfiguration();

        int rotation = windowManager.getDefaultDisplay().getRotation();

        if ( ((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) &&
                config.orientation == Configuration.ORIENTATION_LANDSCAPE)
            || ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) &&    
                config.orientation == Configuration.ORIENTATION_PORTRAIT)) {
          return Configuration.ORIENTATION_LANDSCAPE;
        } else { 
          return Configuration.ORIENTATION_PORTRAIT;
        }
    }

例如在我的情况下我使用了box2d,代码就是这样的

if (box2dUtils.getWorld() != null) {
                    int orient=getDeviceDefaultOrientation();
                    if(orient==1){
                        box2dUtils.getWorld().setGravity(new Vec2(xaccel,yaccel));
                    }
                    else if(orient==2){

                        box2dUtils.getWorld().setGravity(new Vec2(-yaccel,-xaccel));
                    }// initially Vec2(xaccel, yaccel);
                    else{
                        box2dUtils.getWorld().setGravity(new Vec2(xaccel,yaccel));

                    }
                }