diff --git a/android/src/main/java/com/zmxv/RNSound/RNSoundModule.java b/android/src/main/java/com/zmxv/RNSound/RNSoundModule.java index 64382f45..8422bde0 100644 --- a/android/src/main/java/com/zmxv/RNSound/RNSoundModule.java +++ b/android/src/main/java/com/zmxv/RNSound/RNSoundModule.java @@ -22,6 +22,7 @@ import java.io.File; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.io.IOException; import android.util.Log; @@ -456,4 +457,33 @@ public Map getConstants() { constants.put("IsAndroid", true); return constants; } + + /** + * Ensure any audios that are playing when app exits are stopped and released + */ + @Override + public void onCatalystInstanceDestroy() { + super.onCatalystInstanceDestroy(); + + Set> entries = playerPool.entrySet(); + for (Map.Entry entry : entries) { + MediaPlayer mp = entry.getValue(); + if (mp == null) { + continue; + } + try { + mp.setOnCompletionListener(null); + mp.setOnPreparedListener(null); + mp.setOnErrorListener(null); + if (mp.isPlaying()) { + mp.stop(); + } + mp.reset(); + mp.release(); + } catch (Exception ex) { + Log.e("RNSoundModule", "Exception when closing audios during app exit. ", ex); + } + } + entries.clear(); + } }