前言:
Android開發(fā)者應(yīng)該對(duì)onKeyDown這個(gè)方法不陌生停士,這個(gè)是Activity中監(jiān)聽用戶操作物理按鍵時(shí)會(huì)進(jìn)行回調(diào)盟戏,我們可以根據(jù)這個(gè)回調(diào)動(dòng)作做你需要的一些處理,下邊我會(huì)說告訴大家我程序中實(shí)際是如何處理onKeyDown事件的。
1口蝠、啟屏頁
啟屏頁中我們一般都會(huì)放一張推廣圖或者歡迎頁等,然后做個(gè)延時(shí)津坑,那么這個(gè)時(shí)候如果用戶突然不小心按了返回鍵妙蔗,那么這個(gè)Activity就直接銷毀了,也就意味著程序就被kill掉了疆瑰,但是對(duì)用戶來說他以為他只是做了一個(gè)返回的操作眉反,然后用戶又去打開你的程序,發(fā)現(xiàn)居然是重啟穆役,emmm禁漓,體驗(yàn)極不舒適,不過沒關(guān)系孵睬,只要做個(gè)處理就行了播歼,在啟屏頁的那個(gè)Activity中屏蔽掉用戶的返回鍵就可以了,具體如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
可能有的同學(xué)發(fā)出疑問:我看好多APP啟屏頁也沒做這個(gè)處理啊,當(dāng)然掰读,這個(gè)不是必須要處理的秘狞,還是要根據(jù)項(xiàng)目的實(shí)際需求來做取舍。
2蹈集、登錄界面
在登錄界面的時(shí)候我們按照一般頁面交互邏輯烁试,這個(gè)時(shí)候按下返回鍵一般就直接退出程序了,因?yàn)椴还苣闶峭顺龅卿浄祷氐降卿浗缑孢€是從啟屏頁到登錄界面拢肆,正常情況下我們都要finish掉其它Activity减响,所以這個(gè)我認(rèn)為是很有必要做處理的,只需實(shí)現(xiàn)只在冷啟動(dòng)時(shí)顯示啟動(dòng)頁郭怪,即點(diǎn)擊返回鍵與點(diǎn)擊HOME鍵退出效果一致支示,具體如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
return true;
}
return super.onKeyDown(keyCode, event);
}
3、主頁面
程序處在主頁面的時(shí)候鄙才,再不做任何處理的情況下颂鸿,按下返回鍵一般邏輯肯定是直接退出程序了,我們比較常見的APP處理方式大多都是在規(guī)定時(shí)間內(nèi)按兩次退出攒庵、或者按返回鍵給個(gè)Dialog詢問是否確定退出嘴纺,小編程序中使用的是第一種败晴,也推薦第一種,因?yàn)椴粫?huì)降低用戶對(duì)你程序的反感度栽渴,具體如下:
private long exitTime;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - exitTime > 2000) {
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
MainActivity.this.finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}