17

我正在使用Google Cardboard(其HeadTracker类)来检测 AR 应用程序中有关设备旋转的某些事情。它工作得很好。

但是,在某些设备上,它不起作用(没有任何反应)。我认为这是因为他们没有必要的传感器。我的问题:

1) 我想在运行时检测当前设备是否支持 HeadTracker,即它有可用的必要传感器。为此,我需要知道 HeadTracker 使用了哪些传感器,以便查询这些传感器是否存在。这些传感器是什么?

2) 有没有办法在 AndroidManifest 中指定必要的传感器?据我所知,没有办法。因此,如果用户下载我的应用程序,该应用程序必须在运行时通知用户他的设备不受支持。这不好。有什么想法吗?

4

3 回答 3

17

Google Cardboard 的网站有一个设备兼容性列表:似乎有些不完整,所以我尝试查看 Cardboard.jar 的源代码。HeadTracker.java 似乎有以下逻辑:

SensorManager sensorManager = (SensorManager)HeadTracker.this.mContext.getSystemService("sensor");

for (int sensorType : HeadTracker.INPUT_SENSORS) {
  Sensor sensor = sensorManager.getDefaultSensor(sensorType);
  sensorManager.registerListener(HeadTracker.this.mSensorEventListener, sensor, 0, handler);
}

在同一个文件中定义 INPUT_SENSORS

{TYPE_ACCELEROMETER, TYPE_GYROSCOPE};

我不确定 HeadTracker 是否可以在只有其中一个传感器的手机上工作。我的猜测是两者都是必要的。

您的应用程序可能需要某些审查器才能运行(甚至在 android 市场上可见),并在清单中使用以下行:

<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true" />

public Sensor getDefaultSensor (int type)您还可以使用 SensorManager 的函数在运行时检查传感器是否可用于您的应用程序 。

于 2014-11-15T12:49:27.430 回答
7

谷歌 Cardboard 耳机不能只使用加速度计,它需要陀螺仪。

加速度计可以检测施加在手机上的力。这包括读取地球的引力,因此手机可以估计“向下”的位置。但是加速度计不能准确地告诉你你在 3d 空间中的方向是什么,它只能根据它读取的力来近似。

这对 VR 来说精度太低了,所以这就是你需要陀螺仪的原因。

如果你下定决心让它在你的非陀螺仪手机上工作,你可以编写一段你自己的代码,根据加速度计数据近似手机方向,但请记住,这与真正令人满意的 VR 体验相去甚远。

于 2015-03-09T10:06:27.897 回答
0

如果您希望您的游戏不使用陀螺仪手机,请使用 Fibrum SDK

例如尝试

太空 X 猎人 VR:

https://play.google.com/store/apps/details?id=com.creation3d.spacexhuntervr

VR碗:

https://play.google.com/store/apps/details?id=com.creation3d.vrbowl

和 Fibrum 的游戏

于 2016-03-17T01:44:52.823 回答