【发布时间】: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_sound_bell.mp3是否在项目中src文件夹的根目录中? -
是的,在
<project dir>/src/notification_sound_bell.mp3 -
请注意,该资源不是文件,因此您进行的后台媒体调用将不起作用。我刚刚注意到您提到将 mp3 放置在错误的原始文件夹中。它应该在资产文件夹中。尝试给文件一个不同的名称。这可能是构建服务器逻辑中的问题。
标签: codenameone