android home鍵合返回鍵遇到的問題

這次做安卓端的app共遇到兩個(gè)按鍵問題。
一、使用TabActivity的主頁面需要監(jiān)聽返回事件,實(shí)現(xiàn)返回鍵與home鍵一樣的效果。
1、首先先查出觸發(fā)home鍵的效果需要調(diào)用的代碼如下:

Intent intent=newIntent(Intent.ACTION_MAIN);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//如果是服務(wù)里調(diào)用,必須加入new task標(biāo)識(shí)

intent.addCategory(Intent.CATEGORY_HOME);

startActivity(intent);

2、緊接著查找監(jiān)聽返回事件的方法,有如下兩種:
@Override

public booleanonKeyDown(intkeyCode, KeyEvent event) {

? ? ? ? if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){

? ? ? ? ? ? ? ? ?//這里寫下監(jiān)聽到返回事件以后的操作

? ? ? ? ? ? ? ? ?return false;

? ? ? ? ?} else {

? ? ? ? ? ? ? ? return super.onKeyDown(keyCode, event);

? ? ? ? ?}

? }

或者

@Override

public voidonBackPressed() {

? ? ? //這里寫下監(jiān)聽到返回事件以后的操作

? ? ? ? super.onBackPressed();

}

然而實(shí)際運(yùn)行測(cè)試的時(shí)候發(fā)現(xiàn),這兩個(gè)函數(shù)始終沒有被調(diào)用,去搜了下才知道原來是TabActivity與常規(guī)的按鍵監(jiān)聽事件是有沖突,于是找到了新的替代方案,如下:
@Override

public booleandispatchKeyEvent(KeyEvent event) {

? ? ? ? if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ //這里監(jiān)聽返回按鈕點(diǎn)擊事件

? ? ? ? ? ? ? ? if(event.getAction() == KeyEvent.ACTION_DOWN&& event.getRepeatCount() ==0) {

? ? ? ? ? ? ? ? ? ? ? ? ? //在這里調(diào)用返回鍵需要實(shí)現(xiàn)的功能(上面的判斷使代碼只執(zhí)行一次)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? return false;

? ? ? ? } else {

? ? ? ? ? ? ? ? return super.dispatchKeyEvent(event);

? ? ? ? }

}


二、第二個(gè)問題是客戶反饋第一次安裝app時(shí),home鍵無效?!
? ? ? 于是測(cè)試過聯(lián)想,華為,魅族,三星,紅米等品牌手機(jī)發(fā)現(xiàn),除了紅米手機(jī),模擬器,其他品牌的手機(jī)都存在第一次安裝app時(shí),點(diǎn)擊home鍵回到桌面再點(diǎn)擊桌面icon時(shí)候,都會(huì)再次啟動(dòng)一個(gè)app,如果是從菜單再次點(diǎn)擊進(jìn)入,或者app完全退出后就不存在這樣的問題。
嘗試了網(wǎng)上各個(gè)版本的解決方案都無效,最終確定的一個(gè)解決方案和原因如下:


大致查到原因是,利用程序安裝器打開程序來啟動(dòng)的Intent沒有Category,而我們打開程序帶了Category。所以可以通過判斷有無Category來決定當(dāng)前頁面是否是啟動(dòng)頁。把代碼下面這段代碼寫入啟動(dòng)頁的onCreate(Bundle savedInstanceState)方法,super.onCreate(savedInstanceState);的下一行:

if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) !=0){
? ? ? ? finish();

? ? ? ? return;

}

以上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容