From 5d727bee5d53d9768753b22dc8751c84c01cc286 Mon Sep 17 00:00:00 2001 From: CloudWebRTC Date: Fri, 3 Feb 2023 14:59:49 +0800 Subject: [PATCH] [Android] fix screen sharing crash on first boot (#203) * fix screen sharing crash on first boot. * update. * update. * Update controls.dart --- example/lib/widgets/controls.dart | 39 +++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/example/lib/widgets/controls.dart b/example/lib/widgets/controls.dart index ec72f80..42fbc4f 100644 --- a/example/lib/widgets/controls.dart +++ b/example/lib/widgets/controls.dart @@ -156,20 +156,35 @@ class _ControlsWidgetState extends State { } if (WebRTC.platformIsAndroid) { // Android specific - try { + requestBackgroundPermission([bool isRetry = false]) async { // Required for android screenshare. - const androidConfig = FlutterBackgroundAndroidConfig( - notificationTitle: 'Screen Sharing', - notificationText: 'LiveKit Example is sharing the screen.', - notificationImportance: AndroidNotificationImportance.Default, - notificationIcon: - AndroidResource(name: 'livekit_ic_launcher', defType: 'mipmap'), - ); - await FlutterBackground.initialize(androidConfig: androidConfig); - await FlutterBackground.enableBackgroundExecution(); - } catch (e) { - print('could not publish video: $e'); + try { + bool hasPermissions = await FlutterBackground.hasPermissions; + if (!isRetry) { + const androidConfig = FlutterBackgroundAndroidConfig( + notificationTitle: 'Screen Sharing', + notificationText: 'LiveKit Example is sharing the screen.', + notificationImportance: AndroidNotificationImportance.Default, + notificationIcon: AndroidResource( + name: 'livekit_ic_launcher', defType: 'mipmap'), + ); + hasPermissions = await FlutterBackground.initialize( + androidConfig: androidConfig); + } + if (hasPermissions && + !FlutterBackground.isBackgroundExecutionEnabled) { + await FlutterBackground.enableBackgroundExecution(); + } + } catch (e) { + if (!isRetry) { + return await Future.delayed(const Duration(seconds: 1), + () => requestBackgroundPermission(true)); + } + print('could not publish video: $e'); + } } + + await requestBackgroundPermission(); } if (WebRTC.platformIsIOS) { var track = await LocalVideoTrack.createScreenShareTrack(