2

我想使用 JSNI 在 GWT 中使用 phonegap 音频 api。我不知道如何在 JSNI 中编写方法。

想知道是否有人知道任何教程。他们的javascript方法真的很简单。

http://docs.phonegap.com/phonegap_media_media.md.html

4

2 回答 2

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 应用程序,那就太棒了。

于 2010-12-14T16:14:56.660 回答
0

我真的只需要播放方法。我猜我对正确执行此操作的知识并不多。该代码对我来说看起来真的很陌生:-)

仍然无法接受您的回答。该网站无法识别我,这很奇怪。

尝试在我的 onModuleLoad 中使用媒体时出现以下错误

构造函数 TESTPHONEGAP.Media(String, new Command(){}) 未定义

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

           }
         });
       m.play()

在与我的主要 onModuleLoad 相同的文件中使用您的类作为“内部类”

于 2010-12-14T17:09:30.793 回答