Codename One - 播放声音

时间:2018-01-03 11:10:55

标签: codenameone

以下代码在模拟器中工作正常,我听到音频:

    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)

1 个答案:

答案 0 :(得分:1)

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