Глобализация не определена и 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.