logo
常见问题
当前页

如何解决 macOS 权限问题?

2022-11-16

如何检查电脑是否开启应用的截取屏幕权限和辅助功能?

请打开 macOS 电脑的“系统偏好设置”,找到“安全性与隐私”选项,切换到“隐私”选项卡,确认以下权限是否开启:

为什么打开了权限,还是无法截取图片或者报错?

在 macOS 电脑的“设置”中看到的状态,并不是应用真实的状态,建议使用代码判断权限是否开启(请参考下文的“如何判断系统权限?”)。

如果已经开启权限,请先关闭后,再次打开重试。

如何跳转到系统设置权限弹窗?

请参考此网址设置 “系统相关 URL”:MacOS System Preference Links

如何判断系统权限?

  • 辅助功能权限

    可以通过调用以下 SDK 的内部接口确认权限。

    SCREENCAPTURE_API bool zego_windowthumbnail_window_checkStatus(ZegoWindowHandle handle);
  • 屏幕录制权限

    macOS 10.15 版本后的系统以后需要开启此权限。SDK 对此权限功能没有封装,需要用户自行实现。 请参考以下代码:

    bool ZegoSDKEngineMacUtils::checkScreenCapturePermission()
    {	
        if (QSysInfo::macVersion() < 14)	
        {		
            return true;	
        }	
        if (@available(macOS 10.15, *)) 
        {		
            CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);		
            NSUInteger numberOfWindows = CFArrayGetCount(windowList);		
            NSUInteger numberOfWindowsWithInfoGet = 0;		
            for (int idx = 0; idx < numberOfWindows; idx++) 
            {			
                NSDictionary *windowInfo = (NSDictionary *)CFArrayGetValueAtIndex(windowList, idx);			
                NSString *windowName = windowInfo[(id)kCGWindowName];			
                NSNumber* sharingType = windowInfo[(id)kCGWindowSharingState];			
                if (windowName || kCGWindowSharingNone != sharingType.intValue) 
                {				
                    numberOfWindowsWithInfoGet++;			
                } else {				
                    NSNumber* pid = windowInfo[(id)kCGWindowOwnerPID];				
                    NSString* appName = windowInfo[(id)kCGWindowOwnerName];				
                    // NSLog(@"windowInfo get Fail pid:%lu appName:%@", pid.integerValue, appName);			
                }		
            }		
            CFRelease(windowList);		
            if (numberOfWindows == numberOfWindowsWithInfoGet) {			
                return true;		
            } else {			
                return false;		
            }	
        }	
        return true;
    }

Previous

为什么通过系统音量无法调节背景音乐?

Next

如何修改音频 3A 处理的配置?