如何在Android

时间:2017-02-25 18:40:27

标签: android weka activity-recognition

我正在开发一款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;
    }

}

1 个答案:

答案 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)。