我们正在为可穿戴应用程序使用TYPE_LINEAR_ACCELERATION
TYPE_GRAVITY
传感器事件值,但对于sony smartwatch 3,由于缺少这两个传感器,我们的应用程序无法提供兼容性
官方文件说
Android开源项目(AOSP)提供三种基于软件的 运动传感器:重力传感器,线性加速度传感器和a 旋转矢量传感器。这些传感器在Android 4.0和更新版本中更新 现在使用设备的陀螺仪(除了其他传感器)来改进 稳定性和性能。如果你想尝试这些传感器,你可以 使用getVendor()方法和getVersion()来识别它们 方法(供应商是谷歌公司;版本号是3)。 必须按供应商和版本号识别这些传感器 因为Android系统会考虑这三个传感器 二次传感器。例如,如果设备制造商提供 他们自己的重力传感器,然后AOSP重力传感器显示为 二次重力传感器。所有这三个传感器都依赖于 陀螺仪:如果设备没有陀螺仪,这些传感器则没有 出现并且无法使用。
所以我的问题是,如果OEM没有为这三种基于软的传感器提供主要支持,那么有没有一种方法可以使用AOSP。我不明白如何使用它们在文档中提到它只是说使用getVendor()getversion()它只检查谁是供应商和版本是什么。 其他方法是使用滤波器从陀螺仪值中获取这些重力和线性加速度值,但我不知道如何准确地做到这一点以及使用它的注意事项。
PS。 LG G WATCH和Moto 360确实提供了这些传感器,我还从getVendor方法检查了供应商的EM Micro for Sony和Invensense for G手表。 G Watch中没有Google Inc
答案 0 :(得分:0)
请参阅此问题Sony SmartWatch 3 (SWR50) no longer returns Sensor.TYPE_LINEAR_ACCELERATION
出于某种原因,'直线加速'和'重力'传感器在索尼智能手表3上无法正常工作。您可以使用加速计传感器来获得加速度,应用低通滤波器来获得重力值和减去重力值以获得“线性加速度”。请参考下面的代码示例。
public void onSensorChanged(SensorEvent event){
// In this example, alpha is calculated as t / (t + dT),
// where t is the low-pass filter's time-constant and
// dT is the event delivery rate.
final float alpha = 0.8;
// Isolate the force of gravity with the low-pass filter.
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
// Remove the gravity contribution with the high-pass filter.
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}