11

jQueryMobile を使用して phonegap android アプリを作成しています。

アプリが古い場合は更新を提案するために、Web サービスでアプリのバージョン コードをチェックし、Google Play ストアにプロンプ​​トを表示する機能を構築したいと考えています。

私の検索によると、PhoneGap にはバージョン コードを見つける方法がないようです。

それを行う方法はありますか:

  • Java クラスに何も書かずに?
  • 新しいバージョンをプッシュするたびに、更新された変数を手動で保存する必要はありませんか?

または、クラスへの書き込みが不可欠な場合、PhoneGap からどのように呼び出すのですか?

編集:受け入れられた回答を実用的なソリューションで編集しました! 誰もがそれから利益を得られることを願っています。

編集 (2): ここに完全なプラグイン レポと説明があります。お気軽にフォークしてください :) https://github.com/gcatalfamo/Version

4

2 に答える 2

5

Javaクラスを作成せずに質問したことは知っていますが、何らかの方法で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 に答える