在Android模拟器中模拟ActivityRecognition事件

10

我一直在寻找同样的东西,我希望进行GPS回放可能会触发IN_VEHICLE事件,但可悲的是它并没有... - Kenny
你有没有找到解决方案? - Artist404
没有,我没有得到一个。唯一的解决方案就是@MrMagoo建议的。 - Steven Wexler
3个回答

2
面对相同的问题,我也听到了你所描述的噪音。为了部分解决这个问题,我重构了代码,将检测到的活动处理放在了一个独立的AsyncTask类中。然后,我编写了一系列的junit测试用例,这些测试用例可以向这个活动检测处理类传递模拟事件信息。考虑到Android对每个对象执行的asynctask执行次数有限制,我的junit会循环创建可运行任务来与活动处理类交互。
另外,我还发现了otto和dagger2库,它们可以注入事件到Android总线中。但目前仍在研究中...

1
如果您仍想讨论它,请在帖子下发表评论,而不要回答。 - Aminah Nuraini

2

不幸的是,仅凭GPS运动无法触发活动检测。Google会考虑您的加速度计和其他仪器来计算最可能的活动,如果加速度计没有显示任何变化,它将始终显示您处于“静止”状态。

Google的官方位置测试文档说:

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

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

我找到的唯一有效的解决方法是在Android模拟器上打开虚拟传感器菜单,并手动执行像偏航前后移动这样的操作(请参见截图,只需将“偏航”点向前向后拖动即可在屏幕上观察到手机的倾斜)。对我而言,当与GPS模拟配对时,这通常会导致在一段时间后检测到IN_VEHICLEUNKNOWN(低概率)。

screenshot of virtual sensors with yaw


0

你可以使用adb连接到shell并手动模拟更改,如this answer中所讨论的那样。如果你像我一样使用的是Windows系统,你只需连接到shell然后输入命令获取服务的pid并直接运行kill命令。Android上的cut和sed版本不是标准的GNU版本,并且表现得足够奇怪,以至于我还没有找到如何用一行命令完成它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接