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

本当に play メソッドが必要なだけです.私はこれを正しく行うための知識があまりありません.そのコードは私にとって本当に異質に見えます:-)

まだあなたの回答を受け入れることができません.サイトは私を認識しません.それは奇妙です.

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 に答える