我正在使用 Google Cardboard (其HeadTracker类)来检测有关AR应用程序中设备旋转的某些信息。效果很好。
HeadTracker
但是,在某些设备上,它不起作用(什么也没有发生)。我认为这是因为它们没有必要的传感器。我的问题:
1)我想在运行时检测当前设备是否支持HeadTracker,即它具有可用的必要传感器。为此,我需要知道HeadTracker使用了哪些传感器,以便可以查询是否存在这些传感器。这些传感器是什么?
2)是否可以在AndroidManifest中指定必要的传感器?据我所知,这是不可能的。因此,如果用户下载了我的应用程序,则该应用程序将必须在运行时通知用户该设备不受支持。不好 有什么想法吗?
谷歌纸板的网站上有一个设备兼容性列表:似乎有些不完整,因此我尝试查看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)功能在运行时检查传感器是否可用于您的应用程序 。
public Sensor getDefaultSensor (int type)