在Android模拟器中模拟ActivityRecognition事件

问题描述 投票:7回答:3

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

sensor set acceleration {x}:{y}:{z}
geo fix {latitude} {longitude}
android location accelerometer activity-recognition
3个回答
2
投票

面对同样的问题,你得到了同样的板球噪音。我部分解决了这个问题,通过重构使我检测到的活动在它自己的AsyncTask类中得到处理。然后我编写了一系列可以将模拟事件信息传递给此活动检测处理类的junits。鉴于android对每个对象可以执行的asynctask执行的数量有限制,我的junit在循环中创建runnables以与活动处理类交互。

我还发现了可以将事件注入android总线的otto和dagger2库。尽管如此,仍在进行中


2
投票

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

谷歌的official location testing docs说:

模拟位置对位置服务使用的活动识别算法没有影响。要了解有关活动识别的更多信息,请参阅课程Recognizing the User's Current Activity

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

我发现的唯一有效的解决方法是在Android模拟器上打开虚拟传感器菜单并手动做一些来回偏航(见截图,只需来回拖动“偏航”点,然后在屏幕上观看手机倾斜)。对我来说,这经常会导致IN_VEHICLEUNKNOWN的(低概率)检测一段时间后与GPS模拟配对。

screenshot of virtual sensors with yaw


0
投票

您可以使用adb连接到shell并手动模拟更改,如this answer中所述。如果你像我一样在Windows上,你只需连接到shell然后输入命令来获取服务的pid并直接运行kill命令。 android上的cut和sed版本不是标准的GNU版本,表现得很奇怪,我还没弄明白如何使用单行来完成它。

© www.soinside.com 2019 - 2024. All rights reserved.