2010-12-14 91 views

回答

0

基本上它聽起來像它會是這樣的:

public final class Media extends JavaScriptObject { 
    protected Media() {} 

    public static native final Media newInstance(String src, Command command) /*-{ 
    var callback = function() { command.execute(); }; 
    return new Media(src, callback); 
    }-*/; 

    public native final void getCurrentPosition(AsyncCallback<String> command) /*-{ 
    var callback = function(position) { command.onSuccess('' + position); }; 
    this.getCurrentPosition(callback); 
    }-*/; 
    public native final void play() /*-{ 
    this.play(); 
    }-*/; 
    //... more methods here 
} 

用法:

Media m = Media.newInstance("http://www.example.com/src.mp3", new Command() { 
    @Override 
    public void execute() { 
    // Code executed after Media is created. 
    } 
}); 
m.getCurrentPosition(new AsyncCallback<String>() { 
    @Override 
    public void onSuccess(String position) { 
    Window.alert(position); 
    } 
}); 
m.play(); 

這是一個粗略的草圖,如果你知道更多關於類型是什麼傳遞給回調是你可以做更好的事情,如它是一個int或另一個JS覆蓋類型。

該API有點奇怪,因爲一切顯然是異步的,但這就是生活。

一旦你掌握了編寫GWT JSNI綁定的訣竅,它非常簡單。

如果你最終走上了這條道路,如果你開源你的GWT包裝庫,那麼其他GWT開發者可以編寫一些iPhone/Android應用程序將會非常棒。

+0

添加了'play()'方法的示例,這是最簡單的方法,因爲它不包含任何參數。 – 2010-12-14 17:48:49

0

我只需要播放方法really.I我不太一樣懂行這樣做正確我guess.That代碼看起來真的很陌生:-)

還是不能接受你的answer.The網站無法識別我很奇怪。

我試圖利用媒體在我的onModuleLoad

構造TESTPHONEGAP.Media時,遇到下列錯誤(字符串,新司令部(){})是未定義

Media m = new Media("test.mp3", new Command() { 
      @Override 
      public void execute() { 

      } 
     }); 
     m.play() 

使用類如與我的main主模塊相同的文件中的「內部類」onModuleLoad

+0

這是奇怪的網站不認識我。我也試圖接受上述答案。 – james 2010-12-14 17:16:18

+0

我的示例不正確。構造函數不正確,請改用'newInstance()'。 – 2010-12-14 19:26:37

+0

請使用評論,而不是新的答案,以迴應我的答案。點擊答案底部的「添加評論」。 – 2010-12-14 19:27:01