谷歌纸板VR传感器

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

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

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

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


答案 1

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" />

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


答案 2

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

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

对于VR来说,精度太低了,所以这就是为什么你需要陀螺仪。

如果您执着于使其在非陀螺仪手机上工作,则可以根据加速度计数据编写一段自己的代码来近似手机方向,但请记住,这与真正令人满意的VR体验相去甚远。


推荐