一尘不染

Google Cardboard VR传感器

java

我正在使用 Google Cardboard (其HeadTracker类)来检测有关AR应用程序中设备旋转的某些信息。效果很好。

但是,在某些设备上,它不起作用(什么也没有发生)。我认为这是因为它们没有必要的传感器。我的问题:

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

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


阅读 271

收藏
2020-12-03

共1个答案

一尘不染

谷歌纸板的网站上有一个设备兼容性列表:似乎有些不完整,因此我尝试查看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)功能在运行时检查传感器是否可用于您的应用程序 。

2020-12-03