【问题标题】:Phonegap Android Back Button - close app with back button on homepagePhonegap Android Back Button - 在主页上使用返回按钮关闭应用程序
【发布时间】:2012-01-26 00:38:10
【问题描述】:

我正在使用 Jquery Mobile/Phonegap 开发一个 Android 应用程序。我有以下代码来控制手机的后退按钮:

document.addEventListener("backbutton", backKeyDown, true); 


function backKeyDown() { 
    // Call my back key code here.
    $.mobile.changePage("#homepage", "slideup");
}

这一切都很好,但我希望应用程序仅在主页上按后退按钮时关闭,这可能吗?

【问题讨论】:

  • 公共类 MainActivity 扩展 Activity {

标签: jquery-mobile cordova


【解决方案1】:

您需要跟踪主页的显示时间。当您知道自己在主页上时:

navigator.app.exitApp();

【讨论】:

  • navigator.app.exitApp() [和其他 navigator.app 扩展] 的 phonegap 文档在哪里?我在docs.phonegap.com/en/2.2.0/index.html 找不到它
  • 它没有记录,因为它不是跨平台的。如果您想了解适用于 Android 的内容,请在文本编辑器中打开 cordova.js 并搜索“cordova/plugin/android/app”。代码中其实有几个不错的 cmets 可以帮助你搞清楚是怎么回事。
  • 谢谢西蒙 - 会检查一下。
【解决方案2】:

更新:这已停止使用最新的 Phonegap 更新(据说)。如果您知道,请随时提供可行的解决方案。


我是这样做的:

document.addEventListener("backbutton", function(e){
    if($.mobile.activePage.is('#homepage')){
        /* 
         Event preventDefault/stopPropagation not required as adding backbutton
          listener itself override the default behaviour. Refer below PhoneGap link.
        */
        //e.preventDefault();
        navigator.app.exitApp();
    }
    else {
        navigator.app.backHistory()
    }
}, false);

有关详细信息,您可以在此处找到包含完整示例的相关文档:http://docs.phonegap.com/en/2.0.0/cordova_events_events.md.html#backbutton

【讨论】:

  • 你为什么使用e.preventDefault()
  • e.preventDefault 用于取消事件的默认动作,本例为backHistory(),(即同理,防止不触发默认动作)。跨度>
【解决方案3】:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    document.addEventListener("backbutton", onBackKeyDown, false);
}
function onBackKeyDown() 
{
 navigator.app.exitApp();
}

谢谢你。

【讨论】:

  • 是否有必要将后退按钮侦听器包装在设备就绪侦听器中,如此处所示?我已经在不同的地方(包括stackoverflow的其他地方)多次描述了“后退按钮”解决方案,但没有一个显示它像你在这里那样特别包装。如果有人能澄清一下就好了
【解决方案4】:

如果您不想使用 jQuery Mobile,请将 @Spadar Shut 答案上的 $.mobile.activePage.is('#homepage') 更改为 document.getElementById('#homepage'),如下代码所示:

document.addEventListener("deviceready", onDeviceReady, false);

    function onDeviceReady(){
        document.addEventListener("backbutton", function(e){
           if(document.getElementById('#homepage')){
               e.preventDefault();
               navigator.app.exitApp();
           }
           else {
               navigator.app.backHistory()
           }
        }, false);
    }

通过这种方式,不需要只为此目的下载Jquery Mobile 乱码。 Also, activePage is deprecated as of JQuery mobile 1.4.0 将从 1.5.0 中删除。 (Use the getActivePage() method from the pagecontainer widget instead)

【讨论】:

  • 如何将主页设置为我的 index.html?即 document.getElementById('#homepage') 不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多