如何在Android上使用虚拟数据绕过SensorManager数据

如何在Android上使用虚拟数据绕过SensorManager数据,android,accelerometer,android-sensors,sensormanager,sensor-fusion,Android,Accelerometer,Android Sensors,Sensormanager,Sensor Fusion,我必须想办法绕过Android上的sensormanager数据(特别是加速计数据)。我不知道该怎么做,因为我对安卓系统还比较陌生。我必须输入虚拟传感器数据(最好来自SD卡上的文本文件),以替换实际的sensormanager数据 我的最终目标是使用它来测试一个应用程序,它使用加速计数据来做出决策 我应该能够将虚拟数据提供给所有请求传感器数据的应用程序。任何帮助或指导都将不胜感激 PS:我想在Nexus-5 Android手机上实现这一点。SensorManager通过SensorEventLi

我必须想办法绕过Android上的sensormanager数据(特别是加速计数据)。我不知道该怎么做,因为我对安卓系统还比较陌生。我必须输入虚拟传感器数据(最好来自SD卡上的文本文件),以替换实际的sensormanager数据

我的最终目标是使用它来测试一个应用程序,它使用加速计数据来做出决策

我应该能够将虚拟数据提供给所有请求传感器数据的应用程序。任何帮助或指导都将不胜感激


PS:我想在Nexus-5 Android手机上实现这一点。

SensorManager
通过
SensorEventListener
提供来自传感器的数据。 传感器记录包含一个浮点数数组。对于
加速计
而言,有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  
        }

}
编辑:为了提供记录生成率,您可以在
传感器管理器的方法中指出:

registerListener(this, sensor, rate_in_microseconds);
然而,正如文档所示,提供的速率只是一个提示,并不保证事件速率


速率传感器事件在以下位置传递。这只是对系统的一个提示。接收事件的速度可能快于或慢于指定的速率。通常事件接收速度更快。该值必须是SENSOR_DELAY_NORMAL、SENSOR_DELAY_UI、SENSOR_DELAY_GAME或SENSOR_DELAY_faster中的一个,或者是事件之间所需的以微秒为单位的延迟。以微秒为单位指定延迟仅适用于Android 2.3(API级别9)以后的版本。对于早期版本,您必须使用一个传感器延迟常数。*

如果我想用虚拟数据编辑它,我该怎么做?我怎样才能让Android应用层上所有请求此功能的应用程序都能使用此功能?我想知道我是否应该更改Android代码本身,如果是的话-我该怎么做?据我所知,你不能为所有应用程序提供虚拟传感器数据。您可以为您的应用程序执行此操作我如何处理不同的请求速率?例如:我的应用程序可能会请求20Hz或50Hz的加速数据,我如何才能智能地传递数据?我正在尝试你的建议。你的方法部分有效,谢谢!但我还有一个更大的问题,就是绕过所有应用程序的虚拟数据。我不相信安卓系统允许伪造传感器数据(除了可以使用模拟位置的gps),如果你能做到这一点,我会感到惊讶