【问题标题】:Codename One - Play a sound代号一 - 播放声音
【发布时间】:2018-01-05 13:24:56
【问题描述】:

以下代码在模拟器中运行良好,我听到了声音:

    try {
        Media m = MediaManager.createMedia((Display.getInstance().getResourceAsStream(getClass(), "/notification_sound_bell.mp3")), "audio/mpeg");
        m.play();
    } catch (IOException err) {
        Log.e(err);
    }

但它在真正的 Android 设备上根本不起作用。怎么了? 在生成的 apk 上,“notification_sound_bell.mp3”文件放在 /res/raw 文件夹中。

在 Android 4.x 设备上,我得到:

[EDT] 0:0:0,118 - 代号一修订:3b20edadec808867afc2b19774268b66890616ad

[EDT] 0:0:0,129 - 异常:java.lang.NullPointerException - null java.lang.NullPointerException 在 com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) 在 com.codename1.ui.Display.createMedia(Display.java:2998) 在 com.codename1.media.MediaManager.createMedia(MediaManager.java:125) 在 com.codename1.media.MediaManager.createMedia(MediaManager.java:94) 在 it.galgani.app.fiveMinutesAlert.MyApplication.start(MyApplication.java:66) 在 it.galgani.app.fiveMinutesAlert.MyApplicationStub.run(MyApplicationStub.java:140) 在 com.codename1.ui.Display.processSerialCalls(Display.java:1116) 在 com.codename1.ui.Display.mainEDTLoop(Display.java:911) 在 com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在 com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) 在 java.lang.Thread.run(Thread.java:856) [EDT] 0:0:0,214 - 异常 在每五分钟警报版本 1.0 [EDT] 0:0:0,215 - 操作系统和 [EDT] 0:0:0,215 - 错误 java.lang.NullPointerException [EDT] 0:0:0,216 - 当前表格 null [EDT] 0:0:0,217 - 例外: java.lang.NullPointerException - null java.lang.NullPointerException 在 com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) 在 com.codename1.ui.Display.createMedia(Display.java:2998) 在 com.codename1.media.MediaManager.createMedia(MediaManager.java:125) 在 com.codename1.media.MediaManager.createMedia(MediaManager.java:94) 在 it.galgani.app.fiveMinutesAlert.MyApplication.start(MyApplication.java:66) 在 it.galgani.app.fiveMinutesAlert.MyApplicationStub.run(MyApplicationStub.java:140) 在 com.codename1.ui.Display.processSerialCalls(Display.java:1116) 在 com.codename1.ui.Display.mainEDTLoop(Display.java:911) 在 com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在 com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) 在 java.lang.Thread.run(Thread.java:856)

在 Android 7.x 设备上,我得到:

[EDT] 0:0:20,186 - 代号一修订: 3b20edadec808867afc2b19774268b66890616ad

[EDT] 0:0:20,191 - 异常:java.lang.NullPointerException - 尝试 调用虚拟方法'int java.io.InputStream.read(byte[], int, int)' 在空对象引用 java.lang.NullPointerException 上: 尝试调用虚拟方法'int java.io.InputStream.read(byte[], int, int)' 在空对象引用上 com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) 在 com.codename1.ui.Display.createMedia(Display.java:2998) 在 com.codename1.media.MediaManager.createMedia(MediaManager.java:125) 在 com.codename1.media.MediaManager.createMedia(MediaManager.java:94) 在 it.galgani.app.fiveMinutesAlert.MyApplication.start(MyApplication.java:66) 在 it.galgani.app.fiveMinutesAlert.MyApplicationStub.run(MyApplicationStub.java:140) 在 com.codename1.ui.Display.processSerialCalls(Display.java:1116) 在 com.codename1.ui.Display.mainEDTLoop(Display.java:911) 在 com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在 com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) 在 java.lang.Thread.run(Thread.java:762) [EDT] 0:0:20,198 - 异常 每五分钟发出警报 1.0 版 [EDT] 0:0:20,199 - 操作系统和 [EDT] 0:0:20,201 - 错误 java.lang.NullPointerException:尝试 调用虚拟方法'int java.io.InputStream.read(byte[], int, int)' 在空对象引用 [EDT] 0:0:20,202 - 当前表单空 [EDT] 0:0:20,204 - 异常:java.lang.NullPointerException - 尝试 调用虚拟方法'int java.io.InputStream.read(byte[], int, int)' 在空对象引用 java.lang.NullPointerException:尝试 调用虚拟方法'int java.io.InputStream.read(byte[], int, int)' 在空对象引用上 com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) 在 com.codename1.ui.Display.createMedia(Display.java:2998) 在 com.codename1.media.MediaManager.createMedia(MediaManager.java:125) 在 com.codename1.media.MediaManager.createMedia(MediaManager.java:94) 在 it.galgani.app.fiveMinutesAlert.MyApplication.start(MyApplication.java:66) 在 it.galgani.app.fiveMinutesAlert.MyApplicationStub.run(MyApplicationStub.java:140) 在 com.codename1.ui.Display.processSerialCalls(Display.java:1116) 在 com.codename1.ui.Display.mainEDTLoop(Display.java:911) 在 com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在 com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) 在 java.lang.Thread.run(Thread.java:762)

【问题讨论】:

  • 我也试过没有成功:Media m = MediaManager.createBackgroundMedia("file:///notification_sound_bell.mp3"); m.play(); 它给了我“file:///notification_sound_bell.mp3 error java.io.IOException: setDataSource failed.”
  • notification_sou‌​nd_bell.mp3 是否在项目中 src 文件夹的根目录中?
  • 是的,在<project dir>/src/notification_sound_bell.mp3
  • 请注意,该资源不是文件,因此您进行的后台媒体调用将不起作用。我刚刚注意到您提到将 mp3 放置在错误的原始文件夹中。它应该在资产文件夹中。尝试给文件一个不同的名称。这可能是构建服务器逻辑中的问题。

标签: codenameone


【解决方案1】:

我们的系统似乎对 Android 上文件名中的 notification_sound 前缀进行了特殊处理,以便与 Android 上的背景通知声音一起使用。只需将文件重命名为其他名称,它应该可以按预期工作。

【讨论】:

  • 谢谢,从notification_sound_bell.mp3 重命名为bell.mp3 解决了这个问题。当用户在文件名中使用保留前缀时,我建议您在模拟器的日志中添加警告,以防止出现此类问题。
  • 我自己不知道这是一个保留前缀。请提出问题,我们将努力确保澄清这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多