10

有没有一种在 Android 模拟器中模拟DetectedActivity.IN_VEHICLE的好方法。目前,我正在尝试让ActivityRecognitionApi通过 telnet 发送命令来检测事件。

sensor set acceleration {x}:{y}:{z}
geo fix {latitude} {longitude}
4

3 回答 3

2

面临同样的问题并得到与您相同的蟋蟀噪音。我通过重构部分解决了这个问题,以便在它自己的 AsyncTask 类中处理我检测到的活动。然后我编写了一系列可以将模拟事件信息传递给这个活动检测处理类的junit。鉴于android对每个对象可以执行的异步任务执行次数有限制,我的junit在循环中创建runnables以与活动处理类进行交互。

我还发现了 otto 和 dagger2 库,它们可以将事件注入到 android 总线中。虽然仍在进行中...

于 2016-04-13T19:00:41.417 回答
2

不幸的是,仅 GPS 运动不会触发活动检测。谷歌会考虑你的加速度计和其他仪器来计算最可能的活动,如果加速度计显示没有变化,它总是会说你是STILL

谷歌的官方位置测试文档说:

模拟位置对位置服务使用的活动识别算法没有影响。要了解有关活动识别的更多信息,请参阅“识别用户的当前活动”课程。

不幸的是,该链接没有任何关于测试的信息。

我发现的唯一有效的解决方法是打开 Android 模拟器上的虚拟传感器菜单并手动执行来回偏航之类的操作(请参阅屏幕截图,只需来回拖动“偏航”点并观察手机在屏幕上倾斜)。对我来说,当与 GPS 模拟配对时,这通常会导致(低概率)检测到IN_VEHICLE或在一段时间后检测到。UNKNOWN

带有偏航的虚拟传感器的屏幕截图

于 2017-09-18T19:36:25.110 回答
0

您可以使用 adb 连接到 shell 并手动模拟更改,如本答案中所述。如果你像我一样在windows上,你可以简单地连接到shell然后输入命令来获取服务的pid并直接运行kill命令。android 上的 cut 和 sed 版本不是标准的 GNU 版本,并且表现得很奇怪,以至于我还没有弄清楚如何用一行来完成。

于 2019-02-15T16:05:46.287 回答