這次做安卓端的app共遇到兩個按鍵問題。
一、使用TabActivity的主頁面需要監聽返回事件,實現返回鍵與home鍵一樣的效果。
1、首先先查出觸發home鍵的效果需要調用的代碼如下:
Intent intent=newIntent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//如果是服務里調用,必須加入new task標識
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
2、緊接著查找監聽返回事件的方法,有如下兩種:
@Override
public booleanonKeyDown(intkeyCode, KeyEvent event) {
? ? ? ? if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
? ? ? ? ? ? ? ? ?//這里寫下監聽到返回事件以后的操作
? ? ? ? ? ? ? ? ?return false;
? ? ? ? ?} else {
? ? ? ? ? ? ? ? return super.onKeyDown(keyCode, event);
? ? ? ? ?}
? }
或者
@Override
public voidonBackPressed() {
? ? ? //這里寫下監聽到返回事件以后的操作
? ? ? ? super.onBackPressed();
}
然而實際運行測試的時候發現,這兩個函數始終沒有被調用,去搜了下才知道原來是TabActivity與常規的按鍵監聽事件是有沖突,于是找到了新的替代方案,如下:
@Override
public booleandispatchKeyEvent(KeyEvent event) {
? ? ? ? if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ //這里監聽返回按鈕點擊事件
? ? ? ? ? ? ? ? if(event.getAction() == KeyEvent.ACTION_DOWN&& event.getRepeatCount() ==0) {
? ? ? ? ? ? ? ? ? ? ? ? ? //在這里調用返回鍵需要實現的功能(上面的判斷使代碼只執行一次)
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return false;
? ? ? ? } else {
? ? ? ? ? ? ? ? return super.dispatchKeyEvent(event);
? ? ? ? }
}
二、第二個問題是客戶反饋第一次安裝app時,home鍵無效?!
? ? ? 于是測試過聯想,華為,魅族,三星,紅米等品牌手機發現,除了紅米手機,模擬器,其他品牌的手機都存在第一次安裝app時,點擊home鍵回到桌面再點擊桌面icon時候,都會再次啟動一個app,如果是從菜單再次點擊進入,或者app完全退出后就不存在這樣的問題。
嘗試了網上各個版本的解決方案都無效,最終確定的一個解決方案和原因如下:
大致查到原因是,利用程序安裝器打開程序來啟動的Intent沒有Category,而我們打開程序帶了Category。所以可以通過判斷有無Category來決定當前頁面是否是啟動頁。把代碼下面這段代碼寫入啟動頁的onCreate(Bundle savedInstanceState)方法,super.onCreate(savedInstanceState);的下一行:
if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) !=0){
? ? ? ? finish();
? ? ? ? return;
}
以上。