If all you need is to get the current volume, you can add a “GetCurrentVolume” Blueprint node by adding the following and rebuilding the editor and Android .so:
In GameActivity.java:
public int AndroidThunkJava_GetCurrentVolume()
{
AudioManager audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
return audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
}
In AndroidJNI.h to FJavaWrapper:
static jmethodID AndroidThunkJava_GetCurrentVolume;
static int32 CallIntMethod(JNIEnv* Env, jobject Object, jmethodID Method, ...);
In AndroidJNI.cpp to FJavaWrapper::FindClassesAndMethods:
AndroidThunkJava_GetCurrentVolume = FindMethod(Env, GameActivityClassID, "AndroidThunkJava_GetCurrentVolume", "()I", bIsOptional);
Add to //Declare all the static members of the class defs:
jmethodID FJavaWrapper::AndroidThunkJava_GetCurrentVolume;
Add these functions:
int32 FJavaWrapper::CallIntMethod(JNIEnv* Env, jobject Object, jmethodID Method, ...)
{
if (Method == NULL || Object == NULL)
{
return false;
}
va_list Args;
va_start(Args, Method);
jint Return = Env->CallIntMethodV(Object, Method, Args);
va_end(Args);
return (int32)Return;
}
int32 AndroidThunkCpp_GetCurrentVolume()
{
int32 Result = 0;
if (JNIEnv* Env = FAndroidApplication::GetJavaEnv())
{
Result = FJavaWrapper::CallIntMethod(Env, FJavaWrapper::GameActivityThis, FJavaWrapper::AndroidThunkJava_GetCurrentVolume);
}
return Result;
}
Add to KismetSystemLibrary.h:
/**
* Returns the current volume (Android only)
*/
UFUNCTION(BlueprintPure, Category = "Utilities|Platform")
static int32 GetCurrentVolume();
Add to KismetSystemLibrary.cpp:
int UKismetSystemLibrary::GetCurrentVolume()
{
#if PLATFORM_ANDROID
extern int32 AndroidThunkCpp_GetCurrentVolume();
return AndroidThunkCpp_GetCurrentVolume();
#else
return 0;
#endif
}