Back버튼을 두 번 눌러 종료

-- Android 2012. 10. 5. 10:22
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

현재 만드는 소스에는 필요없는 기능이지만 거의 표준처럼 사용되는 기능이기에 나중에 쓰기 위해 정리해둔다. 이미지라던가 소스에 줄 수를 표시하는 건 본인이 싫어하므로 제거했으며, 이미지 등은 출처에서 확인 바란다. (물론 증명된 소스는 아니므로 혹시라도 구현 시 문제가 있다면 추후 수정하도록 하겠다)


안드로이드폰을 사용하다가 무심결에 터치 버튼이 눌러져서 본의 아니게 앱이 종료된 경험을 많은 사람들이 가지고 있을 것이다.

 

아래 소스는 앱 화면에서 'Back' 버튼을 눌렀을 때, 바로 앱이 종료되는 것이 아니라 종료를 위해서 다시 한번 'Back' 버튼을 눌러달라는 메시지를 띄워준다. 그리고는 지정된 시간(여기서는 2초) 이내에 다시 'Back' 버튼이 눌려지면 실제로 앱에서 빠져나오게 된다.

 

package com.huikyun.tester;


import java.util.Calendar;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.Toast;

 

publicclass BackKeyEventActivity extends Activity {

    privatestaticfinal String TAG = "BackKeyEventActivity";

    privatestaticfinalint MSG_TIMER_EXPIRED = 1;

    privatestaticfinalint BACKKEY_TIMEOUT = 2;

    privatestaticfinalint MILLIS_IN_SEC = 1000;

    privateboolean mIsBackKeyPressed = false;

    privatelong mCurrTimeInMillis = 0;


    @Override

    publicvoid onBackPressed() {

       // super.onBackPressed();


        if (mIsBackKeyPressed == false) {

            mIsBackKeyPressed = true;

            mCurrTimeInMillis = Calendar.getInstance().getTimeInMillis();

            Toast.makeText(this, "종료를원하시면다시 \"Back key\"
           
눌러주시기바랍니다.", Toast.LENGTH_SHORT).show();


            startTimer();

        } else {

            mIsBackKeyPressed = false;


            if (Calendar.getInstance().getTimeInMillis() <=
               (mCurrTimeInMillis + (BACKKEY_TIMEOUT * MILLIS_IN_SEC))) {

                finish();

            }

        }

    }


    privatevoid startTimer() {

        mTimerHandler.sendEmptyMessageDelayed(MSG_TIMER_EXPIRED, BACKKEY_TIMEOUT * MILLIS_IN_SEC);

    }


    private Handler mTimerHandler = new Handler() {

        @Override

        publicvoid handleMessage(Message msg) {

            // super.handleMessage(msg);


            switch (msg.what) {

            case MSG_TIMER_EXPIRED: {

               mIsBackKeyPressed = false;

            }


                break;

            }

        }

    };

}

 
출처 : http://huikyun.tistory.com/398

posted by 어린왕자악꿍