PhoneGap Android получит код версии приложения

Я создаю приложение Android для мобильного телефона с jQueryMobile.

Я хочу создать функцию, которая проверяет код версии приложения с помощью webservice, чтобы предлагать обновить, если приложение устарело, запрашивая в магазине воспроизведения Google.

Из моих поисков, похоже, у PhoneGap нет способа найти код версии.

Есть ли способ сделать это:

  • без написания чего-либо в классах Java?
  • без ручного хранения обновленной переменной каждый раз, когда я нажимаю новую версию?

Или, если запись в классах важна, как я могу ее назвать из PhoneGap?

EDIT: я отредактировал принятый ответ с рабочим решением! Я надеюсь, что каждый сможет извлечь из этого выгоду.

EDIT (2): и вот полное плановое репо с инструкциями, не стесняйтесь его разворачивать:) https://github.com/gcatalfamo/Version

Ответ 1

Я знаю, что вы спросили, не записывая 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
    }
);

Ответ 2

требуется небольшое изменение.. класс должен расширять " extends CordovaPlugin"

затем " this.cordova.getActivity(). getPackageName()" будет работать.

В plugins.xml добавьте следующую строку:

НО для Cardova > 2.0 вам нужно добавить config.xml внутри папки xml