11

我正在用 jQueryMobile 构建一个 phonegap android 应用程序。

我想构建一个功能,使用网络服务检查应用程序的版本代码,以便建议更新,如果应用程序已过时,提示到 google play 商店。

从我的搜索来看,PhoneGap 似乎没有找到版本代码的方法。

有没有办法做到这一点:

  • 无需在 Java 类中编写任何内容?
  • 每次推送新版本时无需手动存储更新的变量?

或者,如果在课堂上写作是必不可少的,我该如何从 PhoneGap 中调用它?

编辑:我用一个可行的解决方案编辑了接受的答案!我希望每个人都能从中受益。

编辑(2):这是带有说明的完整插件仓库,请随意分叉:)https://github.com/gcatalfamo/Version

4

2 回答 2

5

我知道您问过不写 Java 类,但是您需要以一种或另一种方式编写。你需要PhoneGap Plugin像安德烈所说的那样写。

创建自定义PhoneGap plugin

在您的应用程序包中创建一个新类:

package com.phonegap.plugins; //your package name

import org.json.JSONArray;

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.apache.cordova.api.PluginResult.Status;

public class Version extends Plugin {

    public final String ACTION_GET_VERSION_NAME = "GetVersionName"; //not used in this version
    public final String ACTION_GET_VERSION_CODE = "GetVersionCode";

    @Override
    public PluginResult execute(String action, JSONArray args, String callbackId) {
        PluginResult result = new PluginResult(Status.INVALID_ACTION);
        PackageManager packageManager = this.cordova.getActivity().getPackageManager();
        if(action.equals(ACTION_GET_VERSION_CODE)) {
            try {
                PackageInfo packageInfo = packageManager.getPackageInfo(this.cordova.getContext().getPackageName(), 0);
                result = new PluginResult(Status.OK, packageInfo.versionCode);
            }
            catch (NameNotFoundException nnfe) {
                result = new PluginResult(Status.ERROR, nnfe.getMessage());
            }
        }

        return result;
    }
}

在 plugins.xml 中,添加以下行:

<plugin name="Version" value="your.package.Version" />

在您的deviceready事件中添加以下代码:

var Version = function() {};
Version.prototype.getVersionCode = function(successCallback, failureCallback) {
    return cordova.exec(successCallback, failureCallback, 'Version', 'GetVersionCode', []);
};

if(!window.plugins) {
    window.plugins = {};
}
if (!window.plugins.version) {
    window.plugins.version = new Version();
}

然后,您可以通过执行以下操作获取 versionCode 属性:

window.plugins.packageManager.getVersionCode(
    function(versionCode) {
        //do something with versionCode
    },
    function(errorMessage) {
        //do something with errorMessage
    }
);
于 2013-03-02T19:40:59.030 回答
0

需要稍作改动.. 类应该扩展“扩展 CordovaPlugin

然后“ this.cordova.getActivity().getPackageName() ”将起作用。

在 plugins.xml 中,添加以下行:

但是对于 Cardova > 2.0 ,您需要在xml 文件夹中添加config.xml

于 2014-01-30T07:58:08.577 回答