Android 實現點選兩次BACK鍵退出應用

jia635發表於2014-04-10

Android中捕獲使用者按鍵是在onKeyDown方法中,只需要判斷使用者按鍵是否是KEYCODE_BACK即後退鍵即可,剩下的即為判斷兩次點選BACK鍵時間間隔問題了。要注意的是每個Activity 要及時關閉相應的Activity,不然不管用,會調到跳到以前的Activity

package com.example.clickexittest;



import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;


public class MainActivity extends Activity {

private static final String TAG = MainActivity_Exit.class.getSimpleName();


// 定義一個變數,來標識是否退出
    private static boolean isExit = false;


    private static Handler mHandler = new Handler() {


        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            isExit = false;
        }
    };
    
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit();
return true;
}
return super.onKeyDown(keyCode, event);
}

private void exit() {
        if (!isExit) {
            isExit = true;
            Toast.makeText(getApplicationContext(), "再按一次後退鍵退出程式",
                    Toast.LENGTH_SHORT).show();
            // 利用handler延遲傳送更改狀態資訊
            mHandler.sendEmptyMessageDelayed(0, 2000);
        } else {
          
            Log.e(TAG, "exit application");

this.finish();
        }
    }

}


在exit方法中,會首先判斷isExit的值,如果為false的話,則置為true,同時會彈出提示,並在2000毫秒(2秒)後發出一個訊息,在Handler中將此值還原成false。如果在傳送訊息間隔的2秒內,再次按了BACK鍵,則再次執行exit方法,此時isExit的值已為true,則會執行退出的方法。


package com.example.clickexittest;


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;


public class MainActivity extends Activity {


private static final String TAG = MainActivity.class.getSimpleName();


private long clickTime = 0; //記錄第一次點選的時間


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


}


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
exit();
return true;
}
return super.onKeyDown(keyCode, event);
}


private void exit() {
if ((System.currentTimeMillis() - clickTime) > 2000) {
Toast.makeText(getApplicationContext(), "再按一次後退鍵退出程式",
Toast.LENGTH_SHORT).show();
clickTime = System.currentTimeMillis();
} else {
Log.e(TAG, "exit application");
this.finish();
// System.exit(0);
}
}
}

相關文章