2017-02-25 8 views
0

사용자가 3 초마다하는 활동을 인식하는 Android 앱을 개발 중입니다 (예 : 자주 사용하는 정적, 걷기, 실행 중). 내 데이터베이스에 다음 값을 증가시키는 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

내가. 내가 아파치의 일반적인 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 메서드는 크기가 2 인 큐를 조사합니다 (이 요소는 2의 역할을합니다). 정수. 반환 된 수 correctResult이 2이면 활동이 시간 ACTIVE (1,2,3)이고 STATIC (2)이 아님을 의미합니다.