Fixed bug 5239 - Play audio on Android while backgrounded (Thanks Superfury)
Add hint SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO not to pause audio when
the app goes to background.
(It requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
diff --git a/include/SDL_hints.h b/include/SDL_hints.h
index 44db3c5..70319ac 100644
--- a/include/SDL_hints.h
+++ b/include/SDL_hints.h
@@ -1028,6 +1028,18 @@
*/
#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE"
+/**
+ * \brief A variable to control whether SDL will pause audio in background
+ * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking")
+ *
+ * The variable can be set to the following values:
+ * "0" - Non paused.
+ * "1" - Paused. (default)
+ *
+ * The value should be set before SDL is initialized.
+ */
+#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO"
+
/**
* \brief A variable to control whether the return key on the soft keyboard
* should hide the soft keyboard on Android and iOS.
diff --git a/src/video/android/SDL_androidevents.c b/src/video/android/SDL_androidevents.c
index 51d2a57..dfd6212 100644
--- a/src/video/android/SDL_androidevents.c
+++ b/src/video/android/SDL_androidevents.c
@@ -175,8 +175,10 @@
SDL_UnlockMutex(Android_ActivityMutex);
}
- ANDROIDAUDIO_PauseDevices();
- openslES_PauseDevices();
+ if (videodata->pauseAudio) {
+ ANDROIDAUDIO_PauseDevices();
+ openslES_PauseDevices();
+ }
backup_context = 0;
}
@@ -191,8 +193,10 @@
SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND);
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESTORED, 0, 0);
- ANDROIDAUDIO_ResumeDevices();
- openslES_ResumeDevices();
+ if (videodata->pauseAudio) {
+ ANDROIDAUDIO_ResumeDevices();
+ openslES_ResumeDevices();
+ }
/* Restore the GL Context from here, as this operation is thread dependent */
if (!isContextExternal && !SDL_HasEvent(SDL_QUIT)) {
diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c
index 0348c85..3cad3be 100644
--- a/src/video/android/SDL_androidvideo.c
+++ b/src/video/android/SDL_androidvideo.c
@@ -181,6 +181,7 @@
videodata->isPaused = SDL_FALSE;
videodata->isPausing = SDL_FALSE;
+ videodata->pauseAudio = SDL_GetHintBoolean(SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO, SDL_TRUE);
mode.format = Android_ScreenFormat;
mode.w = Android_DeviceWidth;
diff --git a/src/video/android/SDL_androidvideo.h b/src/video/android/SDL_androidvideo.h
index 4ab22e1..b94e879 100644
--- a/src/video/android/SDL_androidvideo.h
+++ b/src/video/android/SDL_androidvideo.h
@@ -38,6 +38,7 @@
SDL_Rect textRect;
int isPaused;
int isPausing;
+ int pauseAudio;
} SDL_VideoData;
extern int Android_SurfaceWidth;