diff --git a/modules/juce_audio_devices/native/juce_android_OpenSL.cpp b/modules/juce_audio_devices/native/juce_android_OpenSL.cpp index f39e7d05e3..dcb0553948 100644 --- a/modules/juce_audio_devices/native/juce_android_OpenSL.cpp +++ b/modules/juce_audio_devices/native/juce_android_OpenSL.cpp @@ -261,11 +261,6 @@ struct BufferHelpers } }; -//============================================================================== -// need this from juce_core without asserting -struct JniEnvThreadHolder { static JNIEnv* getEnv(); }; -extern JavaVM* androidJNIJavaVM; - //============================================================================== class OpenSLAudioIODevice : public AudioIODevice { @@ -325,13 +320,7 @@ public: void finished (SLAndroidSimpleBufferQueueItf) { - if (JniEnvThreadHolder::getEnv() == nullptr) - { - JNIEnv* env; - - androidJNIJavaVM->AttachCurrentThread (&env, nullptr); - setEnv (env); - } + attachAndroidJNI(); --numBlocksOut; owner.doSomeWorkOnAudioThread(); diff --git a/modules/juce_core/native/juce_android_JNIHelpers.h b/modules/juce_core/native/juce_android_JNIHelpers.h index d2cfefa227..7db551b8cb 100644 --- a/modules/juce_core/native/juce_android_JNIHelpers.h +++ b/modules/juce_core/native/juce_android_JNIHelpers.h @@ -33,6 +33,9 @@ extern JNIEnv* getEnv() noexcept; // on a java thread which you did not create yourself. extern void setEnv (JNIEnv* env) noexcept; +/* @internal */ +extern JNIEnv* attachAndroidJNI() noexcept; + //============================================================================== class GlobalRef { diff --git a/modules/juce_core/native/juce_android_SystemStats.cpp b/modules/juce_core/native/juce_android_SystemStats.cpp index 249298e9ef..8a8e772913 100644 --- a/modules/juce_core/native/juce_android_SystemStats.cpp +++ b/modules/juce_core/native/juce_android_SystemStats.cpp @@ -158,6 +158,19 @@ private: JniEnvThreadHolder* JniEnvThreadHolder::instance = nullptr; //============================================================================== +JNIEnv* attachAndroidJNI() noexcept +{ + auto* env = JniEnvThreadHolder::getEnv(); + + if (env == nullptr) + { + androidJNIJavaVM->AttachCurrentThread (&env, nullptr); + setEnv (env); + } + + return env; +} + JNIEnv* getEnv() noexcept { auto* env = JniEnvThreadHolder::getEnv();