| @@ -261,11 +261,6 @@ struct BufferHelpers<float> | |||||
| } | } | ||||
| }; | }; | ||||
| //============================================================================== | |||||
| // need this from juce_core without asserting | |||||
| struct JniEnvThreadHolder { static JNIEnv* getEnv(); }; | |||||
| extern JavaVM* androidJNIJavaVM; | |||||
| //============================================================================== | //============================================================================== | ||||
| class OpenSLAudioIODevice : public AudioIODevice | class OpenSLAudioIODevice : public AudioIODevice | ||||
| { | { | ||||
| @@ -325,13 +320,7 @@ public: | |||||
| void finished (SLAndroidSimpleBufferQueueItf) | void finished (SLAndroidSimpleBufferQueueItf) | ||||
| { | { | ||||
| if (JniEnvThreadHolder::getEnv() == nullptr) | |||||
| { | |||||
| JNIEnv* env; | |||||
| androidJNIJavaVM->AttachCurrentThread (&env, nullptr); | |||||
| setEnv (env); | |||||
| } | |||||
| attachAndroidJNI(); | |||||
| --numBlocksOut; | --numBlocksOut; | ||||
| owner.doSomeWorkOnAudioThread(); | owner.doSomeWorkOnAudioThread(); | ||||
| @@ -33,6 +33,9 @@ extern JNIEnv* getEnv() noexcept; | |||||
| // on a java thread which you did not create yourself. | // on a java thread which you did not create yourself. | ||||
| extern void setEnv (JNIEnv* env) noexcept; | extern void setEnv (JNIEnv* env) noexcept; | ||||
| /* @internal */ | |||||
| extern JNIEnv* attachAndroidJNI() noexcept; | |||||
| //============================================================================== | //============================================================================== | ||||
| class GlobalRef | class GlobalRef | ||||
| { | { | ||||
| @@ -158,6 +158,19 @@ private: | |||||
| JniEnvThreadHolder* JniEnvThreadHolder::instance = nullptr; | 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 | JNIEnv* getEnv() noexcept | ||||
| { | { | ||||
| auto* env = JniEnvThreadHolder::getEnv(); | auto* env = JniEnvThreadHolder::getEnv(); | ||||