我非常失望地发现,现在我已经准备好将我的html5应用程序迁移到使用phonegap的手机上,播放音频的能力就像永久动作。它几乎就在那里,但并不完全。
Androids(至少是冰淇淋三明治)的答案是Phonegap媒体api。据大家介绍。
问题在于我真正关心播放音频时的当前时间。在运行Chrome的Mac上,我计算了需要多长时间:
POS = audio.currentTime
它不到一毫秒。
使用Phonegap media api,我必须调用一个异步函数,等待它回调,然后我得到当前的媒体位置。这需要5到150毫秒以上。它不一致,而且速度很慢。
这也引出了一个问题:现在几点了?如果需要150ms才能得到时间,我是否在150ms或者结束时获得了时间?我真的不能确定我得到的时间真的接近当前时间。
我还在编写潜艇导航软件是一件好事,因为有了这么可怕的时间,我永远无法确定我的位置。
我现在正在使用系统时钟来跟踪时间,并使用getCurrentPosition()不时重新同步。但是,我仍然可以超过一百毫秒。
我的问题:任何人都有更好的方法吗?
编辑:
查看Cordova的代码:
/**
* Get current position of playback.
*
* @return position in msec or -1 if not playing
*/
public long getCurrentPosition() {
if ((this.state == STATE.MEDIA_RUNNING) || (this.state == STATE.MEDIA_PAUSED)) {
int curPos = this.player.getCurrentPosition();
this.handler.webView.sendJavascript("cordova.require('cordova/plugin/Media').onStatus('" + this.id + "', " + MEDIA_POSITION + ", " + curPos / 1000.0f + ");");
return curPos;
}
else {
return -1;
}
}
在我看来,这应该执行得非常快......除了调用sendJavascript()之外。我想知道这是神秘延迟的起源吗?
出于我的目的,我不需要onStatus事件:我需要尽可能快地获取当前位置。所以我想知道我是否可以删除那行代码...我想这需要改变Cordova源本身。 :(