2010-08-31 34 views
7

在android應用程序的html文件中使用phonegap/jqtouch/javascript可以捕獲HOME和BACK按鈕的點擊方式嗎?在javascript中捕獲原生按鈕在Android手機中的點擊次數

我有一個使用phonegap的Android應用程序。我想在html頁面中捕獲Android手機本地HOME和BACK按鈕的點擊以優雅地退出/返回。

+0

你可以更具體的問題 – 2010-08-31 14:21:13

+0

有Android應用程序使用phonegap。我想在html頁面中捕獲Android手機本地HOME和BACK按鈕的點擊以優雅地退出/返回。 – Newbee 2010-09-03 06:10:27

回答

10

您可以捕獲PhoneGap中的BACK按鈕事件,但不是HOME按鈕(這是一種糟糕的Android操作,因爲無論您使用的是關於HOME鍵的應用程序,都有明確的用戶期望:發送給您回到你的主屏幕!你不想覆蓋這個功能)。

我將指導您獲取PhoneGap中的代碼(最新版本的phonegap框架的最新源代碼!),以獲取指導。

首先,是必然的 '後退按鈕' 的JavaScript全球一個'BrowserKey的Java對象:

http://github.com/phonegap/phonegap-android/blob/master/framework/src/com/phonegap/DroidGap.java#L291

這個類的定義是在這裏:http://github.com/phonegap/phonegap-android/blob/master/framework/src/com/phonegap/BrowserKey.java

第一件事情你需要在你的應用程序中(我建議你在應用程序初始化期間運行這個程序)是讓框架的本地端知道你正在重寫BACK按鈕的功能。你會用一個簡單的調用做到這一點在JavaScript:

BackButton.override(); 

從那裏出來,你可以將一個事件處理程序文檔的「backKeyDown」事件每一個後退按鈕被擊中的時間來執行邏輯。像這樣的東西應該工作:

document.addEventListener('backKeyDown', function(e) { 
    alert('you hit the back key!'); 
}, false); 

作爲附錄,這裏是JavaScript代碼封裝後退按鈕事件分派:http://github.com/phonegap/phonegap-android/blob/master/framework/assets/js/keyevent.js

基本上,調用BackButton.override(後)的本機端每次按下BACK按鈕時,框架都會調用window.keyEvent.backTrigger()。

+0

我不想重寫HOME按鈕。我只想捕獲按鈕的點擊並結束我的應用程序的會話。有什麼辦法可以做到這一點? – Newbee 2010-09-06 12:12:45

+1

您將不得不在這裏擴展Java代碼:http://github.com/phonegap/phonegap-android/blob/master/framework/src/com/phonegap/DroidGap.java#L612帶有一個開關捕捉HOME按鈕,然後調用app.loadUrl('javascript:myFunction();');觸發一個全局的'myFunction'函數返回到JavaScript中來處理這個問題。只要擴展我在回答關於BACK按鈕捕捉如何工作的方法中描述的方法並將其應用於HOME按鈕即可。 – 2010-09-06 20:07:45

+0

HOME按鈕不應該導致您的應用程序結束會話。在Android中,HOME用於應用程序切換,用戶可能會回到您的應用程序。相反,在活動被銷燬時關閉會話(請參閱[活動生命週期](http://developer.android.com/guide/topics/fundamentals.html#actlife)),但是PhoneGap可以讓您這樣做。 – 2011-01-31 19:23:07

0

我有一個使用phonegap的Android應用程序。我想在html頁面中捕獲Android手機本地HOME和BACK按鈕的點擊以優雅地退出/返回。

4

此代碼示例工程的PhoneGap 0.9.5或更高版本(0.9.6上測試):

document.addEventListener("menubutton", function() { 
     alert('Menu button'); 
    }, false); 

    document.addEventListener("searchbutton", function() { 
     alert('Search button'); 
    }, false);      

    document.addEventListener("backbutton", function() { 
     alert('Back button'); 
    }, false); 

Home鍵無法處理。這是系統保留的。