안드로이드 앱 개발 일지, 2차

안드로이드 앱 개발기 2

FSM 모델 수정

batch 입력에서 에러가 발생하면 초기 상태로 돌아가는데, 그렇게 되면 나중에 데이터를 저장하거나, 초기화 할 경우, 항상 초기 상태에서 전이가 된다. 별로 좋지 않아 보여 아래와 같이 fsm을 수정 했다.

#stateBatchRec에 한번 들어가면 에러가 발생할 경우, #stateDecision 상태로 들어가게 했다. 그 부분에서 #stateSave나 #stateModi로 전이를 일어나게 할 생각이다. 뒤 부분은 아직 못 그렸지만..

보완할 사항으로는 #stateBatchRec 상태에서 일정 시간동안 지나면 #stateDecision으로 돌아가야 한다. timer를 쓰려고 보니, 좀 복잡하여, int를 계속 더해서 일정수가 지나면 전이가 일어나게 하려고 했는데, 잘 안된다. 하위 상태인 #stateRec_Gap에서 int를 초기화 시켜야되는데, 하위 state에서 상위 state에 접근할 수 있는 방법이 없어 보인다.

버튼 두번 입력시 SpeechRecognizer 오류 발생 문데

인식을 시작 하라고 버튼을 누른 상태에서 다시 버튼을 누르면 에러가 발생한다. 이럴 경우, 적당한 초기화를 해야 하는데, 딱히 없어 보인다. #stateDecision에 들어가면 기존의 SpeechRecognizer를 취소하게금 아래와 같이 했다.

    State stateDecision = new State(s0) {
        @Override
        public State fireInit() {
            Log.d("FSM", "Init>>stateDecision;");
            return null;
        }

        @Override
        public void enter() {
            Log.d("FSM", "Entry>>stateDecision;");
            myHandle.sendEmptyMessage(2);
        }

Main Activity는 아래와 같이 handler 처리를 했다.

public class MainActivity extends AppCompatActivity {
    Intent i;
    SpeechRecognizer mRecognizer;
    int TvIndex = 0;
    TextView[] TvGap = new TextView[10];
    TextView[] TvFlush = new TextView[10];
    //hsm에서 SpeechListener를 제어하기 위해서.

    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //음성인식 시작부분..
            if (msg.what == 1)
                mRecognizer.startListening(i);
            if (msg.what == 2)
                mRecognizer.cancel();
        }
    };

thread 사용 문제

주기적으로 이벤트를 감지하기 위해서 thread를 사용했는데, 딱히 필요해 보이지 않는다. 각 이벤트마다 fsm.dispatch형식으로 이벤트를 새로 정의해서 보내는 경우가 대다수다.

코멘트

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.