在 J2ME 中未播放通知声音

Posted

技术标签:

【中文标题】在 J2ME 中未播放通知声音【英文标题】:Notification sound not playing in J2ME 【发布时间】:2012-06-05 06:33:22 【问题描述】:

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

问题是声音在 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

【问题讨论】:

检查您的设备配置,您的设备是否支持.wav格式? 【参考方案1】:

我建议您将 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)) 播放器.close(); ; player.addPlayerListener(监听器);

【讨论】:

以上是关于在 J2ME 中未播放通知声音的主要内容,如果未能解决你的问题,请参考以下文章

在 iPod 库的本地通知中播放声音

如何使用 FCM 在 ios 推送通知中播放自定义通知声音

自定义声音不播放推送通知

收到远程通知时如何播放声音?

如何播放安卓通知声音

iOS 本地通知不会在锁定屏幕上播放声音