2013-03-02 3 views
11

Я создаю приложение Android для Android с jQueryMobile.PhoneGap Android получить код версии приложения

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

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

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

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

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

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

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

+0

Единственный способ Я вижу, вы либо добавляете код версии в свое приложение (например, переменную), либо самостоятельно разрабатываете плагин (см. Http://docs.phonegap.com/en/2.5.0/guide_plugin-development_index.md.html # Plugin% 20Development% 20Guide) – Trinimon

+0

yes Я знал об этих параметрах, но я действительно очень хотел: a) автоматизировать проверку версии и b) избежать создания плагина .. – gcatalfamo

ответ

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 
    } 
); 
+2

вы копируете/вставленный с другого ответа, я уже посмотрел ... этот плагин не работает, потому что this.ctx.getPackageName() возвращает ошибку – gcatalfamo

+0

@gcatalfamo: Решено 'this.ctx.getPackageName()'. Проверьте отредактированный код. –

+0

@gcatalfamo: Да, я сделал c & p, но ответ был не в том месте. Так что нужно воспитывать здесь [Правое место]. –

0

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

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

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

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

Смежные вопросы