마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 Handler 딜레이 시간 질문드립니다. [closed]

0 추천

안녕하세요. 안드로이드 코딩 초본데요.

제가 안드로이드에서 핸들러를 사용해서 값을 두 개(mInterval, mRecTime) 입력 받아서 mRectTime동안 동영상을 촬영하고 정지한 다음 mInterval 후에 다시 mRecTime 동안 동영상을 촬영하고 정지하는걸 반복하도록 만들고 있습니다.
그래서 mHandler.sendEmptyMessageDelayed(0, mRecTime); 여기서 mRecTime을 루프 돌때마다 입력받은 촬영시간과 인터벌값으로 번갈아가면서 넣고 있는데, 이상하게 처음 들어간 값으로만 계속 딜레이가 적용이 됩니다. 해결방법 좀 부탁드리겠습니다. 아니면 다른 방법이 있으면 조언 부탁드립니다.
 
코드 보시면 ChatScreen.java 파일에서 mRecTime과 mInterval을 입력받아서
TakeVideo.java에서 입력받은 값들을 가져와서 동영상 촬영을 하는데
촬영시작 후 mRecTime만큼 기다렸다가 촬영을 종료하고
촬영종료 후 mRecTime=mInterval만큼 기다렸다가 다시 촬영을 시작하고
계속 반복되는 구조입니다.
 
TakeVideo.java
public class TakeVideo extends Activity implements Callback, View.OnClickListener {
        static int mRecTime = 0;
        static int mInterval = 0;
static int temp = 0;
        boolean recording = false;
중략

        @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ccnputfile_video);
중략
mRecTime = ChatScreen.mRecTime;
mInterval = ChatScreen.mInterval;
      temp = mRecTime;
Timer mTimer = new Timer();
mTimer.schedule(task, 1000); // ms 후 카메라 화면
}




// 타이머 시작 전 카메라 화면 불러오는 시간
TimerTask task = new TimerTask(){
public void run() {
           try {
            mHandler.sendEmptyMessage(0);
           } catch (Exception e) {
              e.printStackTrace();
           }
}
};

Handler mHandler = new Handler() {
@SuppressLint("NewApi")
public void handleMessage(Message msg) {
long now = System.currentTimeMillis();
Date date = new Date(now);
SimpleDateFormat CurHourFormat = new SimpleDateFormat("HH");
SimpleDateFormat CurMinuteFormat = new SimpleDateFormat("mm");
String strCurHour = CurHourFormat.format(date);
String strCurMinute = CurMinuteFormat.format(date);
mEndHour=ChatScreen.mEndHour;
mEndMinute=ChatScreen.mEndMinute;
mCurrentHour=Integer.parseInt(strCurHour);
mCurrentMinute=Integer.parseInt(strCurMinute);
    if(back==1){//뒤로 버튼 눌렀을 때

   }
    else if((mEndHour==mCurrentHour)
    && (mEndMinute==mCurrentMinute)){ //종료시간과 현재시간이 같으면

    }
   else{ // 뒤로 버튼 안눌렀을 때
    // 동영상 촬영
if (recording) { // 촬영종료
       mrec.stop();
       recording = false;
  mRecTime = mInterval;
    try {
    ChatWorker.send(TakeVideo.select);
    } catch (ContentEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    } catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
   } 
       else if(!recording){ // 촬영 시작
    recording = true;
        try {
initRecording();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        mrec.start();
        myToast();
        mRecTime = temp;
   }
    mHandler.sendEmptyMessageDelayed(0, mRecTime); // ms마다 촬영
   }
}
};

 

 

질문을 종료한 이유: 해결했음
홍개미 (120 포인트) 님이 2013년 11월 26일 질문
홍개미님이 2013년 11월 28일 closed
...