当今设备和 OS (操作系统) 的许多特征可能对隐私、安全性、及性能有显著影响,若滥用。因此,要求用户明确同意的平台越来越普遍,在访问这些特征之前。
Qt 权限 API 允许应用程序以跨平台方式,校验 (或请求) 这些特性的权限。
A feature that commonly requires user consent is access to the microphone of the device. An application for recording voice memos would perhaps look something like this initially:
void VoiceMemoWidget::onRecordingInitiated() { m_microphone->startRecording(); }
To ensure this application works well on platforms that require user consent for microphone access we would extend it like this:
void VoiceMemoWidget::onRecordingInitiated() { QMicrophonePermission microphonePermission; switch (qApp->checkPermission(microphonePermission)) { case Qt::PermissionStatus::Undetermined: qApp->requestPermission(microphonePermission, this, &VoiceMemoWidget::onRecordingInitiated); return; case Qt::PermissionStatus::Denied: m_permissionInstructionsDialog->show(); return; case Qt::PermissionStatus::Granted: m_microphone->startRecording(); } }
We first check if we already know the status of the microphone permission. If we don't we initiate a permission request to determine the current status, which will potentially ask the user for consent. We connect the result of the request to the slot we're already in, so that we get another chance at evaluating the permission status.
Once the permission status is known, either because we had been granted or denied permission at an earlier time, or after getting the result back from the request we just initiated, we redirect the user to a dialog explaining why we can not record voice memos at this time (if the permission was denied), or proceed to using the microphone (if permission was granted).
注意: On macOS and iOS permissions can currently only be requested for GUI applications.
Some platforms require that the permissions you request are declared up front at build time.
请求的每个权限都必须附有所谓的
用法描述
字符串在应用程序的
Info.plist
文件,描述应用程序为什么需要访问给定权限。例如:
<key>NSMicrophoneUsageDescription</key> <string>The microphone is used to record voice memos.</string>
每种权限类型的相关用法描述键,在文档编制中有描述。
要确保相关权限后端包括在应用程序中,请
把构建系统指向自定义
Info.plist
.
请求的每个权限都必须附有
uses-permission
条目在应用程序的
AndroidManifest.xml
文件。例如:
<manifest ...>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
</manifest>
要确保相关权限后端包括在应用程序中,请
把构建系统指向自定义
AndroidManifest.xml
或使用 qt_add_android_permission()。
每种权限类型的相关权限名称,在文档编制中有描述。
下列权限类型可用:
| 访问蓝牙外围设备 | |
| 访问用户的日历 | |
| 访问摄像头为取得图片 (或视频) | |
| 访问用户的联系人 | |
| 访问用户的位置 | |
| 为监视访问麦克风 (或录制声音) |
注意: The available permission types cover core functionality of Qt modules like Qt Multimedia and Qt Positioning, but do not encompass all platform-specific permissions. Custom permission types are not currently supported.
To ensure the best possible user experience for the end user we recommend adopting the following best practices for managing application permissions:
另请参阅 信息特性列表文件 and Qt Creator:编辑清单文件 .