我必须想办法绕过 Android 上的传感器管理器数据(尤其是加速度计数据)。我不知道如何继续,因为我对 Android 比较陌生。我必须提供虚拟传感器数据(最好来自 SD 卡上的文本文件)来替换实际的传感器管理器数据。
我的最终目标是用它来测试一个应用程序,它使用加速度计数据来做出决定。
我应该能够将虚拟数据提供给所有请求传感器数据的应用程序。任何帮助或指导将不胜感激。
PS:我想在 Nexus-5 Android 手机上实现这一点。
我必须想办法绕过 Android 上的传感器管理器数据(尤其是加速度计数据)。我不知道如何继续,因为我对 Android 比较陌生。我必须提供虚拟传感器数据(最好来自 SD 卡上的文本文件)来替换实际的传感器管理器数据。
我的最终目标是用它来测试一个应用程序,它使用加速度计数据来做出决定。
我应该能够将虚拟数据提供给所有请求传感器数据的应用程序。任何帮助或指导将不胜感激。
PS:我想在 Nexus-5 Android 手机上实现这一点。
SensorManager
通过 提供来自传感器的数据SensorEventListener
。传感器记录包含一系列浮点数。如果Accelerometer
有 3 个浮点数表示朝向 X、Y 和 Z 轴的加速度值。因此,在实现过程中,SensorEventListener
您可以用测试所需的虚拟值覆盖这些值。
@Override
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if(type == Sensor.TYPE_ACCELEROMETER){
float result[] = event.values;
// modify the values here
}
}
编辑:为了提供记录生成率,您可以在SensorManager
' 方法上指明它:
registerListener(this, sensor, rate_in_microseconds);
但是,正如文档在此处指出的那样,提供的速率只是一个提示,并不保证事件发生率。
速率传感器事件的发送时间为。这只是对系统的提示。事件的接收速度可能比指定的速率快或慢。通常会更快地接收到事件。该值必须是 SENSOR_DELAY_NORMAL、SENSOR_DELAY_UI、SENSOR_DELAY_GAME 或 SENSOR_DELAY_FASTEST 之一,或者是所需的事件之间的延迟(以微秒为单位)。以微秒为单位指定延迟仅适用于 Android 2.3(API 级别 9)以后。对于早期版本,您必须使用 SENSOR_DELAY_常量之一。*