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

카운트다운타이머 한번만 실행 하고싶어요

0 추천

제가 어플 개발중에 데시벨이 70 이상일시 카운트 다운 함수를 이용해서 10초동안 카운트다운 들어가는데요 10초동안 데시벨이 70이상일시 소리가 나게 소스를 구현했는데 중요한건 데시벨이 70이상일시 카운트다운 함수가 무한적으로 실행되네요.  한번만 실행할수 있는 방법이 있을까요?

정리

1. 데시벨이 70이상일시 카운트 다운 함수 실행 ( 여기서 카운트 다운 여러개가 실행되버립니다..ㅠㅠ)

 

public void SmartAlarm(final double amplitudeDb) throws Exception {
    final TextView timeView = (TextView) findViewById(R.id.textView2);
    final TextView timeView2 = (TextView) findViewById(R.id.textView3);
    CountDownTimer mCountDownTimer = null;
    final int[] beep = {1};
    final int totaltime = 10000;

                    if (amplitudeDb > 70) {

                        mCountDownTimer = new CountDownTimer(totaltime, 1000) {
                            @Override
                            public void onTick(long millisUntilFinished) {
                                timeView.setText("" + millisUntilFinished);
                                if (amplitudeDb > 70) {
                                    beep[0]++;
                                }
                                timeView2.setText("DB수치" + beep[0]);
                            }

                            @Override
                            public void onFinish() {
                                timeView.setText("완료");

                            }
                        };
                        mCountDownTimer.start();
                        {

                        }
                    }
익명사용자 님이 2018년 5월 13일 질문

1개의 답변

0 추천
View의 Tag를 이용해보는건 어떤가요

timeview에 알람이 울리지 않는 상태를 저장하는거죠

예를들어 울리지 않는상태 0, 울리는상태 1로 잡아서

onTick()안에서

timeView.setTag(0) / timeView.setTag(1) 를 지정하고

if(amplitudeDb > 70 & timeVIew.getTag() == 0) 으로 조건을 바꾸는거죠

timeView의 tag에 따라 조건을 만들어서 한번만 울릴수 있게요
익명사용자 님이 2018년 5월 13일 답변
일단 답변 감사합니다.그렇게 하면 여전히 카운트다운은 그대로 여러개로 실행이 되네요..
그렇다면 SmartAlarm()을 호출을 여러번 하는 부분이 있나요?
함수자체는 문제가 없어보입니다
...