以下代码在模拟器中工作正常,我听到音频:
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 - Codename One修订版:3b20edadec808867afc2b19774268b66890616ad
[EDT] 0:0:0,129 - 异常:java.lang.NullPointerException - null java.lang.NullPointerException at com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) 在com.codename1.ui.Display.createMedia(Display.java:2998)at 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)at com.codename1.ui.Display.mainEDTLoop(Display.java:911)at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)at at 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)at 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)at com.codename1.ui.Display.mainEDTLoop(Display.java:911)at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)at at com.codename1.impl.CodenameOneThread $ 1.run(CodenameOneThread.java:60) 在java.lang.Thread.run(Thread.java:856)
在Android 7.x设备上,我得到:
[EDT] 0:0:20,186 - Codename One修订版: 3b20edadec808867afc2b19774268b66890616ad
[EDT] 0:0:20,191 - 异常:java.lang.NullPointerException - 尝试 调用虚方法' int java.io.InputStream.read(byte [],int, INT)'在null对象上引用java.lang.NullPointerException: 尝试调用虚方法' int java.io.InputStream.read(byte [], int,int)'在null对象引用 com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) 在com.codename1.ui.Display.createMedia(Display.java:2998)at 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)at com.codename1.ui.Display.mainEDTLoop(Display.java:911)at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)at at com.codename1.impl.CodenameOneThread $ 1.run(CodenameOneThread.java:60) at 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 - 当前表单null [EDT] 0:0:20,204 - 异常:java.lang.NullPointerException - 尝试 调用虚方法' int java.io.InputStream.read(byte [],int,int)' 在null对象上引用java.lang.NullPointerException:尝试 调用虚方法' int java.io.InputStream.read(byte [],int,int)' 在null对象引用 com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) 在com.codename1.ui.Display.createMedia(Display.java:2998)at 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)at com.codename1.ui.Display.mainEDTLoop(Display.java:911)at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)at at com.codename1.impl.CodenameOneThread $ 1.run(CodenameOneThread.java:60) 在java.lang.Thread.run(Thread.java:762)
答案 0 :(得分:1)
我们的系统似乎对Android上的文件名中的notification_sound
前缀进行了特殊处理,以便在Android上使用背景通知声音。只需将文件重命名为其他内容,它应该按预期工作。