Глобализация не определена и onPhoneGapAvailable не запускается

Мы пытаемся разработать приложение phonegap с GWT, phonegap 2.4, gwtphonegap 2.4. Сейчас мы тестируем его на Android 4.2. Мы использовали материал "Фотографии", и он работает как брелок в браузере и на мобильных устройствах, но когда мы пытаемся использовать глобализацию для определения локали системы, это не работает. Событие onPhneGapAvailable никогда не срабатывает, и если мы вызываем getGlobalization напрямую, оно говорит, что оно не определено.

Мы вызываем этот метод из события onPhoneGapAvailable:

  private void detectLanguage() {
        //if it is in a mobile take the language from the OS
        if (phoneGap.isPhoneGapDevice()) {
            Window.alert("detecting language");
            phoneGap.getGlobalization().getLocaleName(new GlobalizationCallback<CLocale, GlobalizationError>() {

                @Override
                public void onSuccess(CLocale s) {
                  ...
                }

                @Override
                public void onFailure(GlobalizationError f) {
                  ....
                }
            });
        }
    }

После этого: phoneGap.initializePhoneGap();

Наш HTML:

<!doctype html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title></title>
       <script type="text/javascript" language="javascript" src="js/cordova-2.4.0.js"></script>
       <meta name="gwt:property" content="locale=en">

       <script src="js/init.js"></script>


    <script type="text/javascript" language="javascript" src="asdf.mobileclient/asdf.mobileclient.nocache.js"></script>

    <script type="text/javascript">
        document.addEventListener("deviceready", (function(){ PhoneGap.available = true;}), false);
    </script>
  </head>

  <body>
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>

  </body>
</html>

А конфигурация в приложении (config.xml) устанавливает следующий плагин:

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

Заранее спасибо.

3 ответа

Вам всегда нужно ждать события PhonegapAvailable. GWT-Phonegap регистрируется на событие "deviceready" и впоследствии запускает событие GWT.

Доступ к любой части API без устройства уже не будет работать.

I have found with GWT 2.5 and phonegap 3.2, the PhonegapAvailable event is not being handled. My work-around is to handle the deviceready событие напрямую.

Так в onModuleLoad(), Я имею:

phoneGap = GWT.create(PhoneGap.class);
phoneGap.initializePhoneGap();
setupOnDeviceReady();  // This needs to follow the call to initializePhoneGap()

куда setupOnDeviceReady() является:

private native void setupOnDeviceReady() /*-{
    var self = this;
    var cb = function() {self.@com.myapp.client.EntryClass::onDeviceReady()();};
$doc.addEventListener("deviceready", $entry(cb), false);
}-*/;

А также onDeviceReady() contains whatever code requires phonegap to be initialized (ie, whatever code would have been in the onPhoneGapAvailable обработчик.

Я никогда не использовал gwtphonegap, поэтому я не знаю, как работает initializePhoneGap, ни событие onPhoneGapAvailable, но я уверен, что document.addEventListener("deviceready", (function(){ PhoneGap.available = true;}), false); срабатывает, как только Cordova полностью загружен, так что в вашем случае PhoneGap.available = true; когда ваше устройство готово.

Может быть, вы должны проверить это PhoneGap.available является true вместо того, чтобы рассчитывать на событие onPhoneGapAvailable.

Другие вопросы по тегам