2012-06-05 134 views
3

我正在开发J2ME应用程序。
我正在使用诺基亚6131 NFC手机。我正在使用NetBeans IDE。
我有4种形式,我在填写表单时为用户播放一些通知声音。在J2ME中未播放通知声音

问题是声音在3到4分钟后突然熄灭,唯一的解决办法是退出应用程序并再次打开它。

我的代码

public void playSoundOK() 
{ 
     try 
     { 
      InputStream is = getClass().getResourceAsStream("/OK.wav"); 
      Player player = Manager.createPlayer(is,"audio/X-wav"); 

      player.realize(); 
      player.prefetch(); 
      player.start(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

异常

at com.nokia.mid.impl.isa.mmedia.audio.AudioOutImpl.openSession(AudioOutImpl.java:206) 
at com.nokia.mid.impl.isa.mmedia.MediaOut.openDataSession(MediaOut.java:282) 
at com.nokia.mid.impl.isa.mmedia.MediaPlayer.doPrefetch(MediaPlayer.java:155) 
at com.nokia.mid.impl.isa.amms.audio.AdvancedSampledPlayer.doPrefetch(+4) 
at com.nokia.mid.impl.isa.mmedia.BasicPlayer.prefetch(BasicPlayer.java:409) 
at org.ird.epi.ui.UtilityClass.playSoundOK(UtilityClass.java:139) 
at org.ird.epi.ui.EnrollmentForm.targetDetected(+695) 
at javax.microedition.contactless.DiscoveryManager.notifyTargetListeners(DiscoveryManager.java : 700) 
at javax.microedition.contactless.DiscoveryManager.access$1200(DiscoveryManager.java:103) 
at javax.microedition.contactless.DiscoveryManager$Discoverer.notifyIndication(DiscoveryManager.java:882) 
at com.nokia.mid.impl.isa.io.protocol.external.nfc.isi.NFCConnectionHandler$IndicationNotifier.run(+67) javax.microedition.media.MediaException: AUD 
+0

检查您的设备配置,您的设备是否支持.wav格式? – Lucifer

回答

2

我劝你NFC和音频播放分成2个不同的线程。

从API回调(如targetDetected)中调用一个需要花费一些时间来完成(如预取)的方法通常是一个坏主意,因为它使您依赖于一种特别强大的内部线程模型,实际上并不存在于手机的MIDP实现中。

您应该有一个线程,其唯一目的是播放应用程序可以发出的声音。使用NFC回调发送非阻塞命令来播放声音(通常使用同步访问命令队列)。音频播放线程可以决定忽略命令,如果它们在忙音播放时发出(在通知多个同时NFC联系人的用户没有意义)

2

您应该关闭播放器。将以下代码添加到您的方法中:

 

    PlayerListener listener = new PlayerListener() { 
     public void playerUpdate(Player player, String event, Object eventData) { 
      if (PlayerListener.END_OF_MEDIA.equals(event)) { 
       player.close(); 
      } 
     } 
    }; 
    player.addPlayerListener(listener);