我想使用JSNI在GWT中使用phonegap音频api。我无法弄清楚如何在JSNI中编写方法。
想知道是否有人知道任何教程。他们的javascript方法非常简单。
答案 0 :(得分: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应用程序,这将是非常棒的。
答案 1 :(得分:0)
我只是真的需要播放方法。我猜不到正确地做到这一点我知道。这个代码对我来说真的很陌生: - )
仍然无法接受你的回答。网站不认识我这很奇怪。
尝试在onModuleLoad
中使用媒体时出现以下错误构造函数TESTPHONEGAP.Media(String,new Command(){})未定义
Media m = new Media("test.mp3", new Command() {
@Override
public void execute() {
}
});
m.play()
将您的类用作与我的主onModuleLoad相同的文件中的“内部类”