2012-04-30 47 views
4

我正在開發一個HTML5網絡應用程序,並用Cordova(phonegap)1.7編譯它。如何防止Android按下按鈕時關閉網絡應用程序?

我想覆蓋Android後退,以便我可以調用window.history.back()而不是關閉應用程序(默認Android)。如何防止Android在按下後退按鈕時終止默認行爲?

我得到「Back button pressed !!!!」在logcat中,所以該方法在應用程序關閉之前觸發。

這是我到目前爲止有:

 // Wait for Cordova to load 
     // 
     document.addEventListener("deviceready", onDeviceReady, false); 

     // Cordova is ready 
     // 
     function onDeviceReady() { 

      document.addEventListener("backbutton", function(e) { 

       console.log("Back button pressed!!!!");     
       window.history.back(); 


      }, false); 

     } 

編輯:我願意直接從DefaultActivity.java機器人類,如果接受的答案解釋的方式來模擬window.history.back()這是可能的!

+0

該代碼應該工作。因爲它還沒有發佈,你從哪裏得到1.7版本的PG。你正在建立github嗎? –

+0

@SimonMacDonald 1.7rc1上週四在download.phonegap.com上發佈。請參閱http://phonegap.com/2012/04/26/1-7-0rc1-released/ –

+0

代碼確實無法正常工作:/ – Sindre

回答

6

我解決我自己的問題通過添加下面的代碼到DefaultActivity.java文件,以防止默認的Android行爲,並保持JavaScript代碼中的問題指出:

@Override 
public void onBackPressed() { 
    return; 
} 

我希望這可以幫助別人的未來與同樣的問題!

+0

我使用phonegap 1.7,這似乎是唯一可行的方法。但是,我更喜歡非本地解決方案,以便它可以用於諸如phonegap構建之類的內容。非常感謝。 – kctang

+0

我也試過相同的代碼......但現在它既不關閉應用程序也不返回....後退按鈕被禁用....你能否建議我解決這個問題,以便我可以返回上次訪問的頁面 –

0

從來沒有這樣做,但是,你試過return true

就像在Java SDK中一樣,如果您返回True,系統會認爲您已正確捕獲該事件並不再將其傳遞給其他事件偵聽器。

+0

是的,我試過了。但可悲的是沒有工作。我也只是打印到控制檯,並沒有做back(),但它仍然退出。奇怪的! – Sindre

2

我採取了這種方法。正如你所顯示的那樣,我迷上了後退事件。我期待看看這是否是第一頁,然後詢問用戶是否要退出該程序。這取決於您希望程序根據其狀態執行的操作。我沒有像你所說的那樣添加覆蓋。我似乎並不需要它。

if ($.mobile.activePage.attr('id') === 'firstpage') { 
    // Prompt to confirm the exit 
} else { 
    window.history.back(); 
} 

如果他們想退出,你可以撥打:

navigator.app.exitApp(); 

關閉程序。

我想你還是想讓用戶退出你的應用程序。我不傾向於使用 不允許某種退出的應用程序。

希望這可以幫助你。

相關問題