2013-06-21 48 views
0

我們正在嘗試開發具有GWT,phonegap 2.4,gwtphonegap 2.4的phonegap應用程序。現在我們正在對Android 4.2進行測試。我們已經使用了地理信息系統,它在瀏覽器和移動設備中的作用就像一個魅力,但是當我們嘗試使用全球化來獲取系統的語言環境時,它不起作用。 onPhneGapAvailable事件永遠不會觸發,如果我們直接調用getGlobalization,它說它是未定義的。全球化是未定義的,onPhoneGapAvailable不會觸發

我們稱之爲從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> 

以及App(config.xml文件)的配置設置以下插件:

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

在此先感謝。

+0

onPhoneGapAvailable在哪裏觸發?deviceready回調沒有被調用? – gaepi

+0

我認爲phoneGap.initializePhoneGap()會觸發它,我錯了嗎? –

回答

0

我從來沒有用過gwtphonegap,所以我不知道initializePhoneGap如何工作既不是onPhoneGapAvailable事件,但我敢肯定,document.addEventListener("deviceready", (function(){ PhoneGap.available = true;}), false);閃光一次,科爾多瓦已滿載,所以你的情況PhoneGap.available = true;當設備已準備就緒。

也許你必須檢查PhoneGap.available是否爲true而不是指向onPhoneGapAvailable事件。

2

您總是需要等待PhonegapAvailable事件。 「deviceready」事件中的GWT-Phonegap寄存器,然後將觸發GWT事件。

在沒有設備準備的情況下訪問API的任何部分都不起作用。

+0

這真的很奇怪。我已經前進了,現在我嘗試在事件phonegapavailable事件中閱讀全球化,但它不起作用。相同的消息: 「無法讀取未定義的房產全球化」 我不明白髮生了什麼事。 –

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() {[email protected]::onDeviceReady()();}; 
$doc.addEventListener("deviceready", $entry(cb), false); 
}-*/; 

而且onDeviceReady()包含的任何代碼要求的PhoneGap進行初始化(即任何代碼就已經在onPhoneGapAvailable處理器