【问题标题】:Send Application to background mode when back button is pressed in Phonegap在Phonegap中按下后退按钮时将应用程序发送到后台模式
【发布时间】:2014-02-05 21:19:58
【问题描述】:

我的 phonegap 应用程序有问题。我想在按下后退按钮时最小化应用程序(在后台发送应用程序以便它仍在运行)。

这是我的代码。

 document.addEventListener("backbutton", onBackKeyDown, false);
 function onBackKeyDown() {
 }

如果我使用navigator.app.exitApp(); - 我的应用程序将终止 如果我使用navigator.app.backhistory() - 它只会返回上一页。

我希望如果我按下后退按钮,它会将我发送到主屏幕并将应用程序发送到后台,以便它仍在运行。谢谢。

【问题讨论】:

标签: cordova


【解决方案1】:

你可以使用这个plugin 然后当设备准备好收听后退按钮和 onBackKeyDown 使用插件启动主屏幕时

`document.addEventListener("backbutton", onBackKeyDown, false);
function onBackKeyDown() {
    navigator.Backbutton.goHome(function() {
        console.log('success')
    }, function() {
        console.log('fail')
    });
}
`

此插件刚刚从Dpa99c 更新,以帮助用户使用cordova >=3

【讨论】:

  • 你用的是哪个版本?
  • 很好,它适用于 CLI 4.1,但有没有机会让这个插件也与 Windows Phone 8 兼容?非常感谢,谢谢。
  • 非常感谢,使用引用的插件并在 backbutton 事件上编写覆盖解决了问题
  • 我不敢相信你真的需要安装一个插件才能做到这一点。为什么 Cordova 如此残缺,甚至连最基本的功能都没有?他们对 Cordova 开发人员有意见吗??
【解决方案2】:

最好的办法是使用插件来启动主屏幕。我已经为我自己的目的创建了一个 - 你可以下载我的 Eclipse 测试项目,其中包含源代码和生成的编译 APK from here

然后您将使用我的插件来覆盖后退按钮的默认行为,如下所示:

function onBackKeyDown(e) {
  e.preventDefault();
  cordova.require('cordova/plugin/home').goHome(function(){
    console.info("Successfully launched home intent");
  }, function(){
    console.error("Error launching home intent");
  });  
}
document.addEventListener("backbutton", onBackKeyDown, false);

这是插件源代码:

Home.java

package org.apache.cordova.plugin;

import org.json.JSONArray;
import org.json.JSONException;

import android.content.Intent;
import android.util.Log;

import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;

public class Home extends CordovaPlugin {

    private static final String LOG_TAG = "HomePlugin";

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if ("goHome".equals(action)) {
            try {               
                Intent i = new Intent(Intent.ACTION_MAIN);
                i.addCategory(Intent.CATEGORY_HOME);
                this.cordova.getActivity().startActivity(i);

            } catch (Exception e) {
                Log.e(LOG_TAG, "Exception occurred: ".concat(e.getMessage()));
                return false;
            }
            callbackContext.success();
            return true;
        }
        Log.e(LOG_TAG, "Called invalid action: "+action);
        return false;  
    }
}

home.js

cordova.define("cordova/plugin/home", function(require, exports, module) {
    var exec = require('cordova/exec');
    var Home = function() {};
    Home.prototype.goHome = function(successCallback, errorCallback) {
        return cordova.exec(successCallback, errorCallback, 'Home', 'goHome', []);
    };
    var home = new Home();
    module.exports = home;
});

config.xml

<plugin name="Home" value="org.apache.cordova.plugin.Home"/>

【讨论】:

    猜你喜欢
    • 2019-12-30
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2016-08-31
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多