Google Cardboard VR传感器

Tho*_*alc 17 java android augmented-reality google-cardboard

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

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

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

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

Dan*_*ski 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);
}
Run Code Online (Sandbox Code Playgroud)

与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" />
Run Code Online (Sandbox Code Playgroud)

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


K.L*_*.L. 7

谷歌纸板耳机不适用于加速度计,它需要陀螺仪.

加速度计可以检测施加到手机的力.这包括读取地球的引力,因此手机可以估计"向下"的位置.但加速度计无法准确地告诉您在3d空间中的方向是什么,它只能基于它所读取的力来近似.

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

如果您已经准备好在非陀螺仪手机上工作,您可以根据加速度计数据编写一段近似于手机方向的代码,但请记住,它与真正令人满意的VR体验相差甚远.