테크 지식
[커뮤니티] 아마도 쉬운 안드로이드 어플만들기 [40] ~키가 눌렸을 때 (onPressed)
퍼갈 때에는 반드시 저작자의 허락과 저작자의 이름(아이디)를 기록하어야 합니다.
저작자는 Snails(tjdtnsu)입니다.
제발 덧글 좀 적어주세요. 강의 적는 시간은 1시간이지만 덧글은 1분도 걸리지 않습니다.
참고 : 이 강좌는 초보자를 위한 Eclipse를 사용하였습니다.
올리는 곳 : 제 네이버 블로그, 디벨로이드 카페
업로드 시간 : 매달 2,4주 오후 11시
난이도 : ★★★★★
오늘은 앱 만드는데 거의 필수적인
'~키가 눌렸을 때'와 관련된 코딩을 하겠습니다.
그 중 오늘은 백 키를 두 번 눌리면 종료하는 걸 해보겠습니다. 참고자료 : 여기
public class SelectActivity extends Activity { private static final int MSG_TIMER_EXPIRED = 1; private static final int Second = 2000; private boolean K = false; private long b = 0;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_select); } public void onBackPressed() { if (K == false) { K = true; mCurrTimeInMillis = Calendar.getInstance().getTimeInMillis(); Toast.makeText(this, "종료를 원하시면 한번 더 누르세요", Toast.LENGTH_LONG).show(); startTimer(); } else { mIsBackKeyPressed = false; if (Calendar.getInstance().getTimeInMillis() <= b+Second ) { finish(); } } }
private void startTimer() { mTimerHandler.sendEmptyMessageDelayed(MSG_TIMER_EXPIRED,Second); }
private Handler mTimerHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case MSG_TIMER_EXPIRED: { K = false; } break; } } };
|
이제 해석을 해 봅시다
public void onBackPressed() {
if (K == false) { K = true;
mCurrTimeInMillis = Calendar.getInstance().getTimeInMillis();
Toast.makeText(this, "종료를 원하시면 한번 더 누르세요", Toast.LENGTH_LONG).show();
startTimer();
일단 Back 키가 눌렀을 때
K라는 변수를 통해 다시 눌려졌는지 확인합니다.
K라는 boolean 변수가 참이 아닐 때(시간 내 처음 누를 때시간을 재기 위해서)
K를 참으로 합니다.
그 뒤 현재시간을 넣고
한번 더 누르면 종료된다는 메세지가 출력합니다.
setTimer 함수를 실행하는데, 이게 좀 중요합니다.(좀 있다가)
} else { mIsBackKeyPressed = false;
if (Calendar.getInstance().getTimeInMillis() <= mCurrTimeInMillis + Second) { finish(); } } }아닐 때는 눌렀는데, 시간 안에 눌려진 상태라는 거겠죠
이것을 확인을 합니다. 여기서 조건이 만족한다면 종료
private void startTimer() { mTimerHandler.sendEmptyMessageDelayed(MSG_TIMER_EXPIRED,Second); }
private Handler mTimerHandler = new Handler() { public void handleMessage(Message msg) {
switch (msg.what) { case MSG_TIMER_EXPIRED: { K = false; } break; } } };
마지막 부분입니다. 여기는 시간이 다 되면 다시 K를 false로 만들어놓습니다.
그 외에는 별 부분이.... 없네요
뭐 어쨌든 도움이 되는 부분이긴 합니다.
다음은 랜덤에 대해 알아보겠습니다.
cf) 강좌 할 것 추천해주세요