通话是手机最重要的功能,手机来电会抑制正在运行的MIDlet运行,此时MIDlet中正在播放的音频需要被停止,等待MIDlet恢复运行时继续播放。 此外,还有一些系统事件,虽然他们不会将MIDlet抑制到后台,但是他们产生的系统提示音也会占用音频硬件,造成MIDlet中的音频播放被中断。例如:新短信、数据线插入、充电器插入和充电完成等。

可以采用如下方法解决这个问题:

Step 1:

// 加载player的代码

// 在player加载成功后为其添加PlayerListener player.addPlayerListener(''yourPlayerListener'');

// 其他代码

Step 2:

// 在实现了PlayerListener接口的类中实现playerUpdate方法

public void playerUpdate(Player player, String event, Object eventData) {

// 当音频设备被系统事件占用时,发生DEVICE_UNAVAILABLE事件

if (event.equals(PlayerListener.DEVICE_UNAVAILABLE)) {

// 如果需要的话,在这里添加代码释放资源

// 添加代码,记录被停止的player或设备可用后是否要继续播放player

 }

// 当音频设备被系统事件归还时,发生DEVICE_AVAILABLE事件

else if (event.equals(PlayerListener.DEVICE_AVAILABLE)) {

// 如果需要,在这里添加代码继续播放player

 }

}

注: Canvas的showNotify()和hideNotify()也能用来判断系统事件的弹出,但是并不能用来精确的判断音频设备是否可用,可能会存在showNotify()被调用的时刻音频设备尚不可用的情况(例如NOKIA 6131)。此外,这两个方法对于只有提示音却不显示界面的系统事件也是无能为力。