在我的Android应用程序中,我只想在用户不移动或只是慢慢移动时显示通知。例如,当用户开车时,我不想显示通知。为了实现这一点,我研究了Activity Recognition API并实现了一个基本组件 - 它基本上可以正常工作。
在第一次测试中,我注意到,当我只是检查具有最高置信度的活动时偶尔会看到一些奇怪的输出,例如,在行走时获得IN_VEHICLE
。由于这是基于统计数据而不是基于统计数据,我对此并不感到惊讶。因此,我在最后N个活动类型上使用简单的滑动窗口。只有当窗口中的所有值都相同时,我才会假设相应的活动。
现在我有3个配置参数:
TIME_BETWEEN_REQUESTS
(以毫秒为单位)作为活动识别API一部分的当前活动值请求之间的最短时间。值越低越新,但电池消耗越高。为了测试,我目前只将它设置为5000(= 5秒)
MIN_CONFIDENCE
(0..100)最低置信度DetectedActivity.getConfidence()
。只有当置信度大于此阈值时,我才认为API对检测到的活动足够有信心。在网络上,我最常见的是MIN_CONFIDENCE >= 75
WINDOW_SIZE
(> = 1)作为相同活动类型的最小数量。目前,我使用WINDOW_SIZE = 3
。因此,如果用户正在行走且手机偶然发现IN_VEHICLE
,我不会立即假设用户正在开车。仅当接下来的两个值也是IN_VEHICLE
时,我才会更改用户的活动状态。
这有意义吗?如果我增加TIME_BETWEEN_REQUESTS
,我有点担心 - 无论如何,实际值是多少 - 因为在用户的活动状态发生变化之前它至少需要WINDOW_SIZE * TIME_BETWEEN_REQUEST
。现在它是15秒,但如果我将TIME_BETWEEN_REQUESTS
设置为30秒并保持WINDOW_SIZE 3
,则需要至少90秒才能进行更改。
这里有什么好/最佳做法?窗口是否必要或者TIME_BETWEEN_REQUESTS
已经做了某种平滑的更大值?