我有一个 Java 应用程序,它使用 Java 声音 API 来录制系统麦克风的声音。当从终端在 macOS 上运行时,录音按预期工作,但使用 install4j 打包应用程序时不会录制声音。
我使用 Liberica JDK 17 作为运行时。
在Install4J中,我使用这样的权利文件。
<?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.device.audio-input</key>
<true/>
<key>com.apple.security.device.microphone</key>
<true/>
</dict>
</plist>
当使用 java -jar 从终端运行时,应用程序请求麦克风访问权限。当通过Install4打包并运行时,不需要权限请求。
该应用程序已使用证书正确签名/公证。
有什么想法我可能会错过吗?
谢谢!
权利文件
<?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.device.audio-input</key>
<true/>
</dict>
足以请求麦克风权限。不过,在您第一次开始录制时,操作系统仍会请求特定权限。如果问题被拒绝,则不会再次显示。
要在 macOS 上重置麦克风权限请求,以便系统在之前被拒绝后再次请求麦克风访问权限,您需要使用
重置应用程序的权限tccutil reset Microphone <bundle ID>
您可以在应用程序包的
Contents/Info.plist
文件中找到包 ID,它包含在 CFBundleIdentifier
键的值中。