我正在开发一款Android应用程序,它能够识别用户每隔3秒钟做一次的活动(必须经常设计)(例如静态,步行,跑步)。我的数据库中有一个Activity表,它增加了以下值:
private int activeTime;
private int longestInactivityInterval;
private int currentInactivityInterval;
private int averageInactInterval;
这些是以片段形式呈现的。目前,它非常“敏感”。例如,如果用户是静止的(即躺在他们的床上)并且他们将手机从口袋中拉出,则它将识别诸如“行走”之类的活动。公认活动的历史如下:
static
static
walking
static
static
如何确保此偶然“行走”识别的活动被识别为“静态”。我有办法纠正这个问题吗?
这是正在进行活动监控的类(根据识别的活动递增值。
public class ActivityMonitor implements Observer, IActivityMonitor {
private User mUser;
private IActivityDataManager mDataManager;
public ActivityMonitor(IActivityDataManager dataManager) {
mDataManager = dataManager;
}
@Override
public void update(Observable observable, Object activity) {
monitorActivity(activity);
}
private void monitorActivity(Object activityClass) {
switch ((int) activityClass) {
case 0:
//activity = "walking";
case 1:
//activity = "running";
case 3:
//activity = "cycling";
mDataManager.incActiveTime();
mDataManager.clearCurrentInacInterval();
break;
case 2:
//activity = "static";
mDataManager.incCurrentInacInterval();
break;
}
}
答案 0 :(得分:0)
我自己找到了解决问题的方法。我正在使用apache的公共CircularFifoQueue,其设置大小为2.
这就是我的解决方案的样子:
private void monitorActivity(Object activityClass) {
int activityInt = (int) activityClass;
correctionList.add(activityInt);
int correctResult = applyCorrection(activityInt);
if (correctResult == correctionList.size()) {
mDataManager.incActiveTime();
mDataManager.clearCurrentInacInterval();
} else {
mDataManager.incCurrentInacInterval();
}
}
private int applyCorrection(int classInt) {
int count = 0;
for (int item : correctionList) {
if (item == 0 || item == 1 || item == 3) {
count++;
}
}
return count;
}
基本上,它添加了classInt,它可以是(0,1,2或3) - walking = 0,running = 1,cycling = 3和static = 2. applyCorrection
方法查看队列大小2(这起因素的作用,2对我很有用)并计算和检查整数。如果返回的计数correctResult
为2,则意味着活动肯定是时间ACTIVE(1,2,3)而不是STATIC(2)。