@@ -853,7 +853,12 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
853
853
result (nil );
854
854
}
855
855
#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]) {
857
862
NSDictionary * argsMap = call.arguments ;
858
863
NSString * trackId = argsMap[@" trackId" ];
859
864
id <LocalTrack> track = self.localTracks [trackId];
@@ -1586,8 +1591,52 @@ - (void)mediaStreamTrackSetVideoEffects:(nonnull NSString *)trackId names:(nonnu
1586
1591
} else {
1587
1592
NSLog (@" mediaStreamTrackSetVideoEffects: track not found" );
1588
1593
}
1594
+ }
1589
1595
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
+ }
1590
1605
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
+ }
1591
1640
}
1592
1641
1593
1642
- (void )mediaStreamGetTracks : (NSString *)streamId result : (FlutterResult)result {
0 commit comments