2017-02-25 92 views
0

我正在開發一個Android應用程序,該應用程序每3秒就會識別用戶所做的活動(必須頻繁地進行設計)(例如靜態,行走,跑步)。我在我的數據庫中有一個活動表,用於增加下列值:如何在Android中使人類活動識別不太敏感

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

我找到了解決自己的問題。我使用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)。