Android實現點選兩次返回鍵和長按返回鍵退出應用實踐

Songlcy發表於2016-10-13

雖然國慶節過了,玩的心還沒回來。

今天給大家分享一篇關於退出應用的知識點。大家都知道在大部分App中,退出應用程式都是以點選兩次返回鍵,並且控制連續點選的時間差,來提示使用者,提高App的應用體驗。

而長按返回鍵退出應用的場景目前國內App相對較少。本篇部落格的內容我將帶大家分別實現以上兩種方式。

1.點選兩次返回鍵退出應用

       點選兩次返回鍵退出應用的核心在於控制使用者點選的時間差,通過判斷時間差來決定執行提示或者退出。既然是控制返回鍵,必然我們需要在onKeyDown的方法中來做處理。同時我們需要判斷時間差,就需要記錄此次點選的時間。

長按返回鍵的處理方式也有兩種:

(1)重寫onBackPressed方法

         相信大家都知道,當我們點選返回鍵的時候,系統其實是會去呼叫onBackPressed方法。並且系統允許我們自己定製該方法的處理方式。所以我們在onBackPressed方法中可以去做時間差的判斷,來看核心程式碼:

    @Override
    public void onBackPressed() {
        //1.點選的時間差如果大於2000,則提示使用者點選兩次退出
        if(System.currentTimeMillis() - mExitTime > 2000) {
            //2.儲存當前時間
            mExitTime  = System.currentTimeMillis();
            //3.提示
            showShortToast(R.string.str_exit_prompt);
        } else {
            //4.點選的時間差小於2000,呼叫父類onBackPressed方法執行退出。
            super.onBackPressed();
        }
    }

(2)重寫onKeyDown

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

    //1.點選返回鍵條件成立
    if(keyCode == KeyEvent.KEYCODE_BACK
            && event.getAction() == KeyEvent.ACTION_DOWN

            && event.getRepeatCount() == 0) {

        //2.點選的時間差如果大於2000,則提示使用者點選兩次退出
        if(System.currentTimeMillis() - mExitTime > 2000) {    

            //3.儲存當前時間

            mExitTime  = System.currentTimeMillis();

            //4.提示

            showShortToast(R.string.str_exit_prompt);
        } else {

           //5.點選的時間差小於2000,退出。

           finish();
           System.exit(0);
        }
        return true;
    }
}


2.長按返回鍵退出應用

長按返回鍵的處理方式也有兩種:

(1)在dispatchKeyEvent中處理

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    //點選返回鍵並且是長按,則退出
    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.isLongPress()) {
        System.exit(0);
        return true;
    }

    return false;
}

(2)在onKeyDown中處理

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_BACK) {

        if(event.getRepeatCount() == 0) {

            showShortToast("長按返回鍵退出");

        } else {

            System.exit(0);
        }
    }
}

getRepeatCount()方法的作用是獲取使用者點選返回鍵的次數, 0代表點選了一次,次數>=1時就代表長按,值越大說明按的時間越長。

兩種場景的退出方式,大家可以根據自己的實際情況選擇。

有問題的小夥伴留言給我~


相關文章