如何在Mac OS下的Electron App中请求屏幕录制权限?

问题描述 投票:0回答:1

我正在尝试创建一个应用程序并请求屏幕录制权限,但如果我直接执行desktopcapturer.getsources()函数并添加正确的应用程序名称,该应用程序会请求权限。

这是一个例子,

const sources = await desktopCapturer.getSources({
      types: ["screen"],
      thumbnailSize: { width: 1920, height: 1080 },
});

我也尝试使用下面的方法,但它没有在系统首选项屏幕录制权限窗口中添加我的应用程序名称,

const permissionStatus: string =
      systemPreferences.getMediaAccessStatus("screen");

    // throwing error if no permission given
    if (permissionStatus !== "granted") {
      // Open Screen privacy settings in System Preferences
      shell.openExternal('x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture');
    
      // throw new Error("screen capture, access denied");
      console.log("Permission status ", permissionStatus);
    }

我希望我的应用程序在启动时或当我的应用程序没有所需权限时显示以下窗口 Visual Studio Code asking screen recording permission in mac

但是我的应用程序当前只是打开权限窗口,而没有添加我的应用程序的名称,如下所示,

screen recording permission screen without app name

javascript macos electron electron-forge screen-recording
1个回答
0
投票

要在系统屏幕录制权限设置中显示您的应用程序,您需要尝试屏幕捕获。这将迫使操作系统将您的应用程序识别为屏幕录像机。另外,使用navigator.mediaDevices.getUserMedia也会触发权限。

const sources = await electron.desktopCapturer.getSources({ types: ['screen'] })
for (const source of sources) {
  if (source.name === 'Entire screen' || source.name === 'Screen 1') {
    navigator.mediaDevices.getUserMedia({
      audio: false,
      video: true,
    })
      .then(async (stream) => {
        // You can open settings if needed
        shell.openExternal("x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture")
      })
      .catch((err) => {
        console.error(err)
      });
    return;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.