0

我们正在尝试使用 GWT、phonegap 2.4、gwtphonegap 2.4 开发一个 phonegap 应用程序。现在我们正在针对 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"/>

提前致谢。

4

3 回答 3

2

您总是需要等待 PhonegapAvailable 事件。GWT-Phonegap 在“deviceready”事件上注册,之后会触发 GWT 事件。

在没有 deviceready 的情况下访问 API 的任何部分都将不起作用。

于 2013-06-23T13:27:54.813 回答
0

我从来没有使用过gwtphonegap,所以我不知道initializePhoneGap 和onPhoneGapAvailable 事件是如何工作的,但我确信document.addEventListener("deviceready", (function(){ PhoneGap.available = true;}), false);一旦cordova 完全加载就会触发,所以在你PhoneGap.available = true;的设备准备好时。

也许您必须检查一下,PhoneGap.availabletrue不是指望 onPhoneGapAvailable 事件。

于 2013-06-21T11:46:42.397 回答
0

我发现在 GWT 2.5 和 phonegap 3.2 中,PhonegapAvailable 事件没有被处理。我的解决方法是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()包含需要初始化phonegap 的任何代码(即,onPhoneGapAvailable处理程序中的任何代码。

于 2013-12-10T02:30:08.130 回答