react-native-callkeep
react-native-callkeep copied to clipboard
Caused by java.lang.NoSuchMethodError: No virtual method stopForeground on Android 6
Bug report
-
[ ] I've checked the example to reproduce the issue.
-
Reproduced on:
-
[x] Android
-
[ ] iOS
Description
According to Crashlytics, This crash is occurring on Android 6.
stopForeground
requires Android7 or higher.
Steps to Reproduce
- receive a call in background on Android 6.
- end the call via
reportEndCallWithUUID
Versions
- Callkeep: 4.3.9
- React Native: 0.69.12
- iOS:
- Android: 6
- Phone model:
Logs
Caused by java.lang.NoSuchMethodError: No virtual method stopForeground(I)V in class Lio/wazo/callkeep/VoiceConnectionService; or its super classes (declaration of 'io.wazo.callkeep.VoiceConnectionService' appears in xxx.apk)
at io.wazo.callkeep.VoiceConnectionService.stopForegroundService(VoiceConnectionService.java:356)
at io.wazo.callkeep.VoiceConnectionService.deinitConnection(VoiceConnectionService.java:159)
at io.wazo.callkeep.VoiceConnection.reportDisconnect(VoiceConnection.java:167)
at io.wazo.callkeep.RNCallKeepModule.reportEndCallWithUUID(RNCallKeepModule.java:582)
at java.lang.reflect.Method.invoke(Method.java)
at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:188)
at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
at android.os.Looper.loop(Looper.java:207)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:228)
at java.lang.Thread.run(Thread.java:818)
I already set this, is something wrong?
android:foregroundServiceType="camera|microphone|phoneCall"
The problem is this line which should be using the legacy stopForeground(boolean) method on Android 6 to maintain backwards compatibility.
I have an existing PR react-native-webrtc#742 to fix the current implementation unrelated to this.
I could amend it to also support the legacy API, but there are other issues you may run into with really old Android versions (e.g. checkIsInManagedCall
requires Android 8+).
I think only add Build.VERSION.SDK_INT > Build.VERSION_CODES.N
condition like flutter callkeep.
according to this line, Android 7 or below don't support Foreground Service.