Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android版cordova/phongap meteor版本中的后退按钮赢得';不要始终如一地关闭应用程序_Android_Cordova_Meteor - Fatal编程技术网

android版cordova/phongap meteor版本中的后退按钮赢得';不要始终如一地关闭应用程序

android版cordova/phongap meteor版本中的后退按钮赢得';不要始终如一地关闭应用程序,android,cordova,meteor,Android,Cordova,Meteor,我用meteor和phonegap/cordova为android构建了一个应用程序: 它可以正常工作(特别是考虑到我不是一个真正的程序员),但我一直在努力解决的一个用户体验问题是,当按下手机上的“后退”按钮时,应用程序不会一直关闭。每隔一段时间,它在第一次按下时就可以工作,但大多数时候,我必须连续5-6次卡住它才能关闭应用程序 我用的是最新的铁制路由器。我正在使用的其他软件包似乎与此问题不太相关,但为了以防万一,它们如下所示: 标准应用程序包 咖啡脚本 用户:字体-awesome@4.1.0

我用meteor和phonegap/cordova为android构建了一个应用程序:

它可以正常工作(特别是考虑到我不是一个真正的程序员),但我一直在努力解决的一个用户体验问题是,当按下手机上的“后退”按钮时,应用程序不会一直关闭。每隔一段时间,它在第一次按下时就可以工作,但大多数时候,我必须连续5-6次卡住它才能关闭应用程序

我用的是最新的铁制路由器。我正在使用的其他软件包似乎与此问题不太相关,但为了以防万一,它们如下所示:

标准应用程序包 咖啡脚本 用户:字体-awesome@4.1.0 帐户密码 自动成型 艾德:收藏2 nemo64:引导 较少的 阿兰宁:角色 约书亚·欧文斯:账户录入 mrt:accounts-admin-ui-bootstrap-3 mizzao:jqueryui 铁:路由器 萨卡:旋转 雷克斯:推 mizzao:bootboxjs 流星黑客:卡迪拉 bootstrap3媒体查询


这里可以看到回购协议:

我无法说明这个问题的确切原因,只是在启动时,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:org.android.tools.suspend@0.1.2
                //window.plugins.Suspend.suspendApp();
            }
        };
    });
}

当我第一次使用它时,我得到的一个警告是,如果用户没有登录,就重定向到登录页面。。如果您在执行此操作的应用程序中使用此方法,您将希望切换到就地呈现登录页面,而不是重定向,否则您的应用程序将立即退出/挂起。

虽然Kelly的答案确实有效,但它在功能上并不适合我的特定情况。关于该解决方案,需要注意的一个重要问题是,当“后退”按钮使您返回到初始页面时,它将立即退出,而不是在初始页面上按“后退”按钮时退出

最后,我使用cordova的backbutton侦听器查看backbutton是否被按下:

if Meteor.isCordova
    Meteor.startup ->
        document.addEventListener("backbutton", ->
            if document.location.pathname is "/"
                navigator.app.exitApp()
            else
                history.go(-1)
然后,如果我是应用程序的根,我将退出/挂起,否则我将返回历史

使用backbutton事件侦听器似乎覆盖了它的默认功能,因此在我的情况下调用history.go(-1)是必要的


还请注意,如果您想要一个真正的历史记录,它可以在初始入口点上存在之前通过历史记录(可能多次访问应用程序的根)返回,那么该解决方案将中断。我的答案和凯利的答案结合起来可能会奏效。我发现,虽然这可能是网站的预期行为,但它并不真正适用于移动应用程序。

在我的例子中,我混合了前面的两个答案,因此它工作得很好

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

这里有一个meteor软件包也可以为您提供:

编辑: 事实上,我继续进行了repo,修复了cordova插件依赖性问题,并使用Kelly的代码而不是原始repo中的代码,请在此处找到我的fork:

或使用以下工具安装在Meteor中:

meteor add tripflex:fix-back-button-android
当通过下面描述的GitHub方法添加时,并且使用Kelly的答案检测根页面时(不要使用GitHub repo上的示例),我可以确认它工作正常

我也不是流星专家(但我是一名全职开发人员),但如果不考虑Kelly的答案,我会在流星启动中移动检查
isCordova
(因为我相信随着应用的发展,你会有更多的启动代码)

编辑:如果您决定使用cordova suspend软件包,它将无法像Meteor中的大多数cordova插件那样工作,因为npm中不存在该插件,因此无法工作:

meteor add cordova:org.android.tools.suspend@https://github.com/Lamerchun/org.android.tools.suspend.git#0dbb52cca0244ba22a8c7975895f0f45d2e9a4a9
必须使用GitHub repo像这样添加它:

meteor add cordova:org.android.tools.suspend@https://github.com/Lamerchun/org.android.tools.suspend.git#0dbb52cca0244ba22a8c7975895f0f45d2e9a4a9

我还不知道这是我的具体问题的答案(我知道后会更新),但这个答案肯定满足了我提出的一般问题,所以我在下面添加了对我有效的解决方案。如果你能看一眼,看看是否有我没有看到的明显问题,我会很高兴的。尽管如此,还是给了你50分
meteor add cordova:org.android.tools.suspend@https://github.com/Lamerchun/org.android.tools.suspend.git#0dbb52cca0244ba22a8c7975895f0f45d2e9a4a9