我在使用我正在为Android工作的无线电流媒体应用程序时遇到了一些麻烦。除了这一点之外,应用程序中的所有内容都工作得很好,所以非常令人沮丧。
我希望能够捕获AudioPlayer的当前播放状态,以便我的应用程序可以在发生缓冲/网络更改时采取措施。
例如,今天我的连接从3G变为Wi-Fi,导致播放器停止死亡,并冻结..有时会停止一两秒然后继续运行。
我在事件监听器中添加了一些代码以进行更改,如下所示,尝试捕获它:
player.addEventListener('change',function(e){
if(e.state == player.STATE_WAITING_FOR_DATA){
lblStatus.text = 'Reconnecting in 10s';
setTimeout(reconnect,10000); // This fires a reconnect function further down in my code.
}
});
但是,更改事件根本不会被触发。这几乎就像等待数据流的过程导致更改事件无法触发。
所以我认为另一种方法是设置一个间隔来每隔1秒调用一次流检查功能,就像这样。
setInterval(checkStream,1000);
function checkStream(){
if(player.state == player.STATE_WAITING_FOR_DATA){
// Add reconnect code here
}
}
这也不起作用。当我添加调试警报以显示player.state
的值时,它始终为null,即使在播放时也是如此。在Titanium Studio IDE中,它说这个属性在android上不可用。然而,在网站上的API文档中,它说它们是。我相信IDE。
作为最后的手段,我决定捕获Ti.Network的更改事件,并在检测到连接重新联机后运行重新连接代码。但是,有时这不是必需的,并且断开&当实际不需要时重新连接流。
有没有其他方法可以捕获AudioPlayer的状态,或者只是坚持使用网络更改事件是解决这个问题的唯一方法?
提前致谢,
戴夫
答案 0 :(得分:0)
由于我使用AudioPlayer功能来播放我自己的播放列表,因此检测音轨何时完成非常重要,这样我就可以请求下一个。 Android和iOS but the actual STATE is not available on Android (3.0 SDK)都会引发事件。在Android上不是一个非常有用的事件。这就是我的用途:
var nextTrackIfEnd = function() {
if (Ti.Platform.name === 'android')
{
$.debug.text = "isPlaying: " + audioPlayer.isPlaying();
if(!audioPlayer.isPlaying() && hasStarted)
{
nextTrack();
}
}
else
{
$.debug.text = "state: " + audioPlayer.state;
if(audioPlayer.state == 0)
{
nextTrack();
}
}
};
setInterval(nextTrackIfEnd, 500);