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

액티비티 전환시 진동 취소하기

0 추천

A 액티비티에서 B 액티비티로 화면을 전환시키는데 A 액티비티에서 진동을 30초뒤에 울리도록 하는 버튼을 만들었는데 B 액티비티로 넘어갔는데도 A 액티비티에서 눌렀던 버튼에 의해 진동이 30초 뒤에 울리게 됩니다.​

button_bomb_random.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        randomTime_a = (Long.parseLong(String.valueOf(0))*60000) + (Long.parseLong(String.valueOf(30))*1000);
        button_bomb_random.setEnabled(false);=
=
        countDownTimer = new CountDownTimer(randomTime_a, 1000) {
            @Override
            public void onTick(long l) {
                textView_bomb.setText((l / 1000)/60 + "" + (l / 1000)%60 + "");
            }

                 @Override
            public void onFinish() {
                textView_bomb.setText("시간 종료");
                button_bomb_random.setEnabled(true);
                vibrator.vibrate(2500);
            }
        };
        countDownTimer.start();
    }
});


button_bomb_back.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(intent);
        vibrator.cancel();
        finish();

    }
});

 

vibrator를 cancel() 해보기도 하고 액티비티를 finish()를 이용해보기도 하였는데 다른 액티비티로 전환했는데 진동이 계속 적용되어 울리게 됩니다.

진동을 울리는 버튼을 누르고 다른 액티비티로 넘어가도 진동이 적용되지 않게 어떻게 할 수 있나요..?ㅠ

쿠롱 (400 포인트) 님이 2022년 8월 22일 질문

1개의 답변

+1 추천

Vibrator가 아니라 어떤 넘인지 모르겠지만, 30초 뒤에 동작을 설정한 넘을onStop에서 취소해 보세요. (countDownTimer로 보이긴하는데, 확실치는 않네요.)

@Override
protected void onStop() {
    super.onStop();
    stopTimer();
}

private void stopTimer() {
     // 여기서 스케쥴러 취소
     /*
      만약 countDownTimer가 스케줄링을 한 녀석이라면...
     if (countDownTimer != null) countDownTimer.cancel();
     */
}

 

spark (226,420 포인트) 님이 2022년 8월 22일 답변
spark님이 2022년 8월 22일 수정
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);

아 vibrator를 빼먹었네요.
vibrator가 이거여도 똑같을까요?
문제는 스케쥴링이 걸려서 지정된 시간에 vibrator가 동작을 하는 것이 주된 이유이므로, 이 스케쥴링부터 취소가 되어야 할 것으로 보입니다. vibrator도 cancel도 해주시는게 더 안전하겠죠.
그리고 스케쥴링 설정된 화면이 활성화된 상태가 아닌데, 스케쥴링이 계속 되는 건 명확한 이유가 없다면 불필요해 보입니다.
덕분에 잘 해결되었습니다 감사합니다!
...