Fondamentalement, il semble que ce serait quelque chose comme ceci:
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
}
Utilisation:
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();
C'est une esquisse, si vous en savez plus sur ce que l'être de type passé au rappel est que vous pouvez faire des choses plus agréables comme avoir un int
ou un autre type de recouvrement JS. L'API est un peu bizarre parce que tout est apparemment asynchrone, mais c'est la vie. Une fois que vous avez appris à écrire des liaisons GWT JSNI, c'est assez simple. Si vous finissez par aller plus loin dans cette voie, ce serait génial si vous ouvriez votre bibliothèque d'enveloppes GWT pour que d'autres développeurs de GWT puissent écrire des applications iPhone/Android.
Ajout d'un exemple de la méthode 'play()', qui est la plus simple car elle ne prend aucun paramètre. –