2015-01-20 51 views
4

我已經建立並應用與流星的PhoneGap /科爾多瓦安卓 https://play.google.com/store/apps/details?id=com.idqkd3gsl4qt51152xgy後退按鈕在科爾多瓦/ phongap流星構建Android不會關閉應用程序不斷

它的工作原理體面OK(特別是考慮到我我不是一個真正的程序員),但我一直苦苦掙扎的一個用戶體驗問題是,當按手機上的後退按鈕時,應用程序不會一直關閉。每隔一段時間它會在第一次印刷機上運行,​​但大多數時候我必須連續5-6次才能將應用程序關閉。

我正在使用最新的鐵路由器。我使用似乎並沒有對這個問題特別相關的軟件包的其餘部分,但有如下幾點,以防萬一:

標準的應用程序的程序包 CoffeeScript的 natestrauser:[email protected] 賬戶-password aldeed:自動窗體 aldeed:collection2 nemo64:引導 少 alanning:角色 joshowens:帳戶進入 MRT:帳戶管理員的用戶界面的自舉-3 mizzao:jQuery的UI 鐵:路由器 薩沙:旋轉 raix:push mizzao:bootb oxjs meteorhacks:kadira bootstrap3媒體查詢

回購可以在這裏看到:https://github.com/The3vilMonkey/BrewsOnTap

回答

4

似乎比我不能指定其他這個問題的確切原因就像在啓動時有幾分與cordova應用程序發生重定向。我找到的最佳解決方案是捕捉popstate事件,並在返回到開始退出或暫停應用程序時。我寧願以這種方式掛起,當用戶回到應用程序時,它從一開始就不啓動它的生命週期。

if(Meteor.isCordova){ 
    Meteor.startup(function(){ 
     window.onpopstate = function() { 
      if (history.state && history.state.initial === true){ 
       navigator.app.exitApp(); 

       //or to suspend meteor add cordova:[email protected] 
       //window.plugins.Suspend.suspendApp(); 
      } 
     }; 
    }); 
} 

有一點需要注意的是讓我當我第一次用這個被重定向到登錄頁面,如果用戶沒有登錄..如果你在一個應用程序,這樣做,你會使用這種方法想要切換到呈現登錄頁面而不是重定向,否則您的應用程序將立即退出/暫停。

+0

我不知道這是對我的具體問題的答案了(當我這樣做會更新),但這個答案肯定滿足我所問的一般問題,所以我已經標記爲正確 – funkyeah 2015-01-24 19:50:00

+0

在下面添加了適用於我的解決方案。如果你能看一眼,看看是否有任何明顯的問題,我不會看到。儘管如此,仍然獲得了50分的積分,其中 – funkyeah 2015-01-25 20:26:51

2

雖然凱利的答案確實起作用,但它並沒有在我的特殊情況下在功能上是正確的。關於該解決方案的一個重要注意點是,只要後退按鈕導致您返回到初始頁面,而不是在初始頁面上按下後退按鈕時,它就會立即退出。

最後我用科爾多瓦的後退按鈕偵聽器來查看是否已按下後退按鈕:

if Meteor.isCordova 
    Meteor.startup -> 
     document.addEventListener("backbutton", -> 
      if document.location.pathname is "/" 
       navigator.app.exitApp() 
      else 
       history.go(-1) 

,然後,如果我在我的應用程序退出的根/暫停,否則我乾脆回去的歷史。

使用backbutton事件偵聽器似乎覆蓋了它的默認功能,所以在我的情況下調用history.go(-1)是必要的。

另請注意,如果您希望在存在於初始入口點之前存在真實的歷史記錄(可能多次訪問應用程序的根目錄),該解決方案將會中斷。我的答案和凱利的組合可能適用於此。我發現雖然這可能是網站的預期行爲,但它並不適用於移動應用程序。

4

就我而言,我將以前的兩個答案混合在一起,以使其運作良好。

document.addEventListener("backbutton", function(){ 
    if (history.state && history.state.initial === true) { 
    navigator.app.exitApp(); 
    } else { 
    history.go(-1); 
    } 
}); 
+0

這款遊戲在Android上完美運行。 – prgmrDev 2015-05-21 11:56:01

0

這裏的可用流星包來爲你做這個還有:

https://github.com/remcoder/fix-back-button-android

編輯: 其實我去前進,分叉是回購,固定在科爾多瓦插件的依賴問題,並使用凱利的代碼,而不是原來的回購代碼,找到我的叉子在這裏: https://github.com/tripflex/fix-back-button-android

或者使用流星安裝:

meteor add tripflex:fix-back-button-android 

我可以證實它可以正常工作,通過下文所述GitHub的方法添加和使用凱利的回答,用於檢測根頁面(不要使用在GitHub庫的例子)時。我不是流星專家(但是我是一個全職開發人員),但是要離開凱利的回答,我會在流星啓動時移動支票isCordova(因爲我相信你會有更多的啓動代碼爲您的應用程序的進展)

Meteor.startup(function(){ 

    // Mobile specific code 
    if(Meteor.isCordova) { 

     window.onpopstate = function() { 
      if (history.state && history.state.initial === true) { 
       navigator.app.exitApp(); 

       //or to suspend meteor add cordova:[email protected] 
       //window.plugins.Suspend.suspendApp(); 
      } 
     }; 

    } 

    // Any other startup code below here 
}); 

編輯:如果你決定要使用科爾多瓦暫停包,它不會像流星最科爾多瓦插件工作,由於該插件在故宮不存在,所以這是行不通的:

meteor add cordova:[email protected] 

必須使用GitHub庫這樣的添加:

meteor add cordova:[email protected]://github.com/Lamerchun/org.android.tools.suspend.git#0dbb52cca0244ba22a8c7975895f0f45d2e9a4a9 
相關問題