设备方向检测(如果平板电脑是垂直的)

时间:2015-09-23 07:36:44

标签: android sensor

让我们说我有一个游戏,当我向左旋转手机时,我的玩家向左走。等等SensorEvent位于'y'位置。这是一个问题。整个应用程序在横向模式下运行(在AndroidManifest.xml中设置)并按以下编码:

  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);

因此。我有一种方法可以检查设备是平板电脑还是智能手机并且它正在工作,但是 - 在'view'垂直的一半平板电脑上 - 我的意思是它们就像手机一样。

在三星Galaxy S4(手机)上,我检查了y-y位置(因为我将手机旋转到两只手中) - 它有效。 在三星Galaxy Tab上我平时将平板电脑放在两只手中,我使用'-x'位置(不知道为什么它会被颠倒 - 应该是x) - 它有效。 问题:像Prestigio这样的平板电脑。它们都是VERTICAL - 就像智能手机一样。当我运行'isTablet'时,它会检查屏幕的大小,并说它是平板电脑,但传感器的xyz系统就像在电话上一样(我必须使用'y')。

有谁知道如何处理所有设备?

1 个答案:

答案 0 :(得分:0)

如果您同时拥有isTablet()并且知道用户的实际屏幕是什么样的,您的最终评论会让我相信,那么以下代码应设置一个标记,useY来描述是否是否使用Y(在这种情况下,使用X)......

// The screen as the user seles it (ie changes with rotation)
int screen_width; (the actual screen width of the phone)
int screen_height; (ditto, height)

// A flag to determine whether to use y or x for the motion detection.
boolean useY = true;

// The logic
if (screen_width > screen_height) { // Landscape (classic tablet)
    if (isTablet()) {
        // Normal: the screen is landscape and the device is a tablet. Use X
        useY = false;
    } else {
        // The device is a phone and the screen is landscape. Based on your
        // comments above, this is also normal
        useY = true;
    }
}
else { // Portrait (classic phone)
    if (isTablet()) {
        // This is the odd case you describe
        useY = false;
    } else {
        // A phone in portrait - should never happen.
    }
}