@@ -853,7 +853,12 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
853853 result (nil );
854854 }
855855#endif
856- else if ([@" mediaStreamTrackHasTorch" isEqualToString: call.method]) {
856+ else if ([@" enableIOSMultitaskingCameraAccess" isEqualToString: call.method]) {
857+ NSDictionary * argsMap = call.arguments ;
858+ BOOL enable = [argsMap[@" enable" ] boolValue ];
859+
860+ [self enableMultitaskingCameraAccess: enable result: result];
861+ } else if ([@" mediaStreamTrackHasTorch" isEqualToString: call.method]) {
857862 NSDictionary * argsMap = call.arguments ;
858863 NSString * trackId = argsMap[@" trackId" ];
859864 id <LocalTrack> track = self.localTracks [trackId];
@@ -1586,8 +1591,52 @@ - (void)mediaStreamTrackSetVideoEffects:(nonnull NSString *)trackId names:(nonnu
15861591 } else {
15871592 NSLog (@" mediaStreamTrackSetVideoEffects: track not found" );
15881593 }
1594+ }
15891595
1596+ - (void )enableMultitaskingCameraAccess : (BOOL )enable result : (FlutterResult)result
1597+ {
1598+ @try {
1599+ AVCaptureSession *session = self.videoCapturer .captureSession ;
1600+ if (session == nil ) {
1601+ NSLog (@" enableMultitaskingCameraAccess: Capture session is nil." );
1602+ result (@NO );
1603+ return ;
1604+ }
15901605
1606+ #if TARGET_OS_OSX
1607+ NSLog (@" enableMultitaskingCameraAccess: Multitasking camera access is not available on macOS." );
1608+ result (@NO );
1609+ return ;
1610+ #else
1611+ if (@available (iOS 16.0 , *)) {
1612+ BOOL shouldChange = session.multitaskingCameraAccessEnabled != enable;
1613+ BOOL canChange = !enable || (enable && session.isMultitaskingCameraAccessSupported );
1614+
1615+ if (shouldChange && canChange) {
1616+ [session beginConfiguration ];
1617+ [session setMultitaskingCameraAccessEnabled: enable];
1618+ [session commitConfiguration ];
1619+
1620+ result (enable ? @YES : @NO );
1621+ } else {
1622+ if (!canChange) {
1623+ NSLog (@" enableMultitaskingCameraAccess: Multitasking camera access is not supported on this device." );
1624+ result (@NO );
1625+ } else {
1626+ NSLog (@" enableMultitaskingCameraAccess: Multitasking camera access is already %@ ." , enable ? @" enabled" : @" disabled" );
1627+ result (enable ? @YES : @NO );
1628+ }
1629+ }
1630+ } else {
1631+ NSLog (@" enableMultitaskingCameraAccess: Multitasking camera access requires iOS 16 or later." );
1632+ result (@NO );
1633+ }
1634+ #endif
1635+ }
1636+ @catch (NSException *exception) {
1637+ NSLog (@" enableMultitaskingCameraAccess: Exception occurred: %@ - %@ " , exception.name , exception.reason );
1638+ result (@NO );
1639+ }
15911640}
15921641
15931642- (void )mediaStreamGetTracks : (NSString *)streamId result : (FlutterResult)result {
0 commit comments