2012-06-05 3 views
3

Я работаю над приложением J2ME.
Я использую телефон Nokia 6131 NFC. Я использую среду IDE NetBeans.
У меня есть 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 разных потоков.

Как правило, это плохая идея вызывать метод, который должен занять некоторое время (например, prefetch) из обратного вызова 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); 

Смежные вопросы