diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index e14842254..30ab20685 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -3462,9 +3462,8 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setAudioDscp(JNIEnv* env extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setAndroidPowerManager(JNIEnv *env, jclass cls, jobject pm) { #ifdef ANDROID - JavaVM *jvm; - env->GetJavaVM(&jvm); - bellesip_wake_lock_init(jvm, pm); + if(pm != NULL) bellesip_wake_lock_init(env, pm); + else bellesip_wake_lock_uninit(env); #endif } diff --git a/java/impl/org/linphone/core/LinphoneCoreImpl.java b/java/impl/org/linphone/core/LinphoneCoreImpl.java index c7dd9f0fa..2e3d64efa 100644 --- a/java/impl/org/linphone/core/LinphoneCoreImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreImpl.java @@ -153,6 +153,7 @@ class LinphoneCoreImpl implements LinphoneCore { private native void enableSdp200Ack(long nativePtr,boolean enable); private native boolean isSdp200AckEnabled(long nativePtr); private native void stopRinging(long nativePtr); + private native static void setAndroidPowerManager(Object pm); LinphoneCoreImpl(LinphoneCoreListener listener, File userConfig, File factoryConfig, Object userdata) throws IOException { mListener = listener; @@ -179,6 +180,7 @@ class LinphoneCoreImpl implements LinphoneCore { public void setContext(Object context) { mContext = (Context)context; mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); + setAndroidPowerManager(mContext.getSystemService(Context.POWER_SERVICE)); } public synchronized void addAuthInfo(LinphoneAuthInfo info) { @@ -272,6 +274,7 @@ class LinphoneCoreImpl implements LinphoneCore { } public synchronized void destroy() { isValid(); + setAndroidPowerManager(null); delete(nativePtr); nativePtr = 0; }