Reputation: 6249
The following code works fine in the Simulator, I hear the audio:
try {
Media m = MediaManager.createMedia((Display.getInstance().getResourceAsStream(getClass(), "/notification_sound_bell.mp3")), "audio/mpeg");
m.play();
} catch (IOException err) {
Log.e(err);
}
But it doesn't work at all on real Android devices. What's wrong? On the generated apk, the "notification_sound_bell.mp3" file is placed in /res/raw folder.
On an Android 4.x device I get:
[EDT] 0:0:0,118 - Codename One revisions: 3b20edadec808867afc2b19774268b66890616ad
[EDT] 0:0:0,129 - Exception: java.lang.NullPointerException - null java.lang.NullPointerException at com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) at com.codename1.ui.Display.createMedia(Display.java:2998) at com.codename1.media.MediaManager.createMedia(MediaManager.java:125) at com.codename1.media.MediaManager.createMedia(MediaManager.java:94) at it.galgani.app.fiveMinutesAlert.MyApplication.start(MyApplication.java:66) at it.galgani.app.fiveMinutesAlert.MyApplicationStub.run(MyApplicationStub.java:140) at 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 com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) at java.lang.Thread.run(Thread.java:856) [EDT] 0:0:0,214 - Exception in Alert every five minutes version 1.0 [EDT] 0:0:0,215 - OS and [EDT] 0:0:0,215 - Error java.lang.NullPointerException [EDT] 0:0:0,216 - Current Form null [EDT] 0:0:0,217 - Exception: java.lang.NullPointerException - null java.lang.NullPointerException at com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) at com.codename1.ui.Display.createMedia(Display.java:2998) at com.codename1.media.MediaManager.createMedia(MediaManager.java:125) at com.codename1.media.MediaManager.createMedia(MediaManager.java:94) at it.galgani.app.fiveMinutesAlert.MyApplication.start(MyApplication.java:66) at it.galgani.app.fiveMinutesAlert.MyApplicationStub.run(MyApplicationStub.java:140) at 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 com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) at java.lang.Thread.run(Thread.java:856)
On an Android 7.x device I get:
[EDT] 0:0:20,186 - Codename One revisions: 3b20edadec808867afc2b19774268b66890616ad
[EDT] 0:0:20,191 - Exception: java.lang.NullPointerException - Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference at com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) at com.codename1.ui.Display.createMedia(Display.java:2998) at com.codename1.media.MediaManager.createMedia(MediaManager.java:125) at com.codename1.media.MediaManager.createMedia(MediaManager.java:94) at it.galgani.app.fiveMinutesAlert.MyApplication.start(MyApplication.java:66) at it.galgani.app.fiveMinutesAlert.MyApplicationStub.run(MyApplicationStub.java:140) at 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 com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) at java.lang.Thread.run(Thread.java:762) [EDT] 0:0:20,198 - Exception in Alert every five minutes version 1.0 [EDT] 0:0:20,199 - OS and [EDT] 0:0:20,201 - Error java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference [EDT] 0:0:20,202 - Current Form null [EDT] 0:0:20,204 - Exception: java.lang.NullPointerException - Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference at com.codename1.impl.android.AndroidImplementation.createMedia(AndroidImplementation.java:2802) at com.codename1.ui.Display.createMedia(Display.java:2998) at com.codename1.media.MediaManager.createMedia(MediaManager.java:125) at com.codename1.media.MediaManager.createMedia(MediaManager.java:94) at it.galgani.app.fiveMinutesAlert.MyApplication.start(MyApplication.java:66) at it.galgani.app.fiveMinutesAlert.MyApplicationStub.run(MyApplicationStub.java:140) at 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 com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) at java.lang.Thread.run(Thread.java:762)
Upvotes: 1
Views: 821
Reputation: 52760
It seems our system has a special treatment to the notification_sound
prefix in a file name on Android for usage with background notification sounds on Android. Just rename the file to something else and it should work as expected.
Upvotes: 1