{T}

申请麦克风/摄像头权限

第一步:修改 entitlements.mac.plist

javascript
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.apple.security.device.audio-input</key>
    <true/>
    <key>com.apple.security.device.camera</key>
    <true/>
  </dict>
</plist>

第二步:在 package.json 进行如下配置

javascript
"mac": {
  "entitlements": "build/entitlements.mac.plist",
    "extendInfo": {
    "NSMicrophoneUsageDescription": "授权访问麦克风",
      "NSCameraUsageDescription": "授权访问摄像头"
  }
}

第三步:主进程

javascript
import { ipcMain,systemPreferences } from 'electron'

ipcMain.on('getMediaAccessStatus', async () => {
  //检测麦克风权限是否开启
  const getMediaAccessStatus = systemPreferences.getMediaAccessStatus('microphone')
  if (getMediaAccessStatus !== 'granted') {
    //请求麦克风权限
    await systemPreferences.askForMediaAccess('microphone')
  }
  // 检测摄像头权限是否开启
  const getCameraAccessStatus = systemPreferences.getMediaAccessStatus('camera')
  if (getCameraAccessStatus !== 'granted') {
    //请求摄像头权限
    await systemPreferences.askForMediaAccess('camera')
  }
})

第四步:preload.js

javascript
import { contextBridge, ipcRenderer } from 'electron'
import { electronAPI } from '@electron-toolkit/preload'

// Custom APIs for renderer
const api = {
  getMediaAccessStatus: () => {
    ipcRenderer.send('getMediaAccessStatus')
  }
}

if (process.contextIsolated) {
  try {
    contextBridge.exposeInMainWorld('electron', electronAPI)
    contextBridge.exposeInMainWorld('api', api)
  } catch (error) {
    console.error(error)
  }
} else {
  // @ts-ignore (define in dts)
  window.electron = electronAPI
  // @ts-ignore (define in dts)
  window.api = api
}

渲染进程调用

javascript
onMounted(() => {
  window.api.getMediaAccessStatus()
})