QML-Anwendungsberechtigungen
Viele Funktionen heutiger Geräte und Betriebssysteme können bei missbräuchlicher Nutzung erhebliche Auswirkungen auf den Datenschutz, die Sicherheit und die Leistung haben. Daher ist es zunehmend üblich, dass Plattformen vor dem Zugriff auf diese Funktionen die ausdrückliche Zustimmung des Benutzers verlangen.
Das Modul Qt Qml Core stellt die Qt C++ Application Permissions-Funktionalität für QML über eine Reihe von Berechtigungstypen zur Verfügung, mit denen die Berechtigung plattformübergreifend geprüft oder angefordert werden kann.
Zugriff auf die Bluetooth-Peripheriegeräte des Benutzers | |
Zugriff auf den Kalender des Benutzers | |
Zugriff auf die Kamera des Benutzers | |
Zugriff auf die Kontakte des Benutzers | |
Zugriff auf den Standort des Benutzers | |
Zugriff auf das Mikrofon des Benutzers |
Verwendung
Um eine bestimmte Berechtigung in Ihrer Anwendung zu prüfen und anzufordern, fügen Sie eine Instanz des entsprechenden Berechtigungstyps ein und setzen bei Bedarf eine seiner Eigenschaften:
CalendarPermission { id: calendarPermission accessMode: CalendarPermission.ReadWrite }
Der Typ kann verwendet werden, um den aktuellen Status der Berechtigungen zu prüfen, zum Beispiel um eine zustandsbasierte Benutzeroberfläche zu steuern:
states: [ State { name: "waitingForPermission" when: calendarPermission.status == Qt.PermissionStatus.Undetermined PropertyChanges { target: permissionRequestItem; visible: true } }, State { name: "permissionDenied" when: calendarPermission.status == Qt.PermissionStatus.Denied PropertyChanges { target: permissionDeniedItem; visible: true } } ]
Im obigen Beispiel werden zwei erlaubnisspezifische Elemente überlagert, wenn der Berechtigungsstatus nicht gewährt ist. Die Benutzeroberfläche für die Anfrage könnte so aussehen:
Rectangle { id: permissionRequestItem anchors.fill: parent visible: false Text { anchors.centerIn: parent text: qsTr("We need your permission to access the calendar." + "Please tap this screen to request permission.") } MouseArea { anchors.fill: parent onClicked: calendarPermission.request() } }
Mit einer entsprechenden verweigerten Benutzeroberfläche:
Rectangle { id: permissionDeniedItem anchors.fill: parent color: "red" visible: false Text { anchors.centerIn: parent text: qsTr("We need your permission to access the calendar," + "but permission was not granted. Please resolve.") } }
Ändern von Berechtigungseigenschaften
Die Eigenschaften einer Berechtigung können geändert werden, auch nachdem eine Anfrage ausgelöst wurde, indem `request()` aufgerufen wird. Dies wird den Status aktualisieren, wenn es ein Ergebnis der neuen Eigenschaftswerte ist, aber es wird nicht zu einer automatischen Anfrage führen, die den neuen Satz von Eigenschaften verwendet.
Wenn beispielsweise eine bereits erteilte Kalendererlaubnis für den Zugriffsmodus Qt.CalendarPermission.ReadOnly
auf Qt.CalendarPermission.ReadWrite
erweitert wird, reagiert die Plattform auf eine von drei Arten:
- Durch implizite Gewährung der erweiterten Berechtigung, z. B. weil die Plattform nicht zwischen den beiden Zugriffsmodi unterscheidet, was zu keiner Statusänderung führt.
- Der Status wird auf "Unbestimmt" zurückgesetzt, so dass der Benutzer erneut um Zugriff auf die nun erweiterte Berechtigung gebeten werden kann.
- Durch Verschieben des Status auf
Denied
, z. B. wenn die Berechtigungen nach dem ersten Antrag nicht mehr erweitert werden können.
Alle diese Zustände sollten dann die Benutzeroberfläche der Anwendung in den entsprechenden Zustand versetzen, in dem der Benutzer über den neuen Zustand informiert wird, mit der Möglichkeit, die neue Berechtigung anzufordern, falls möglich, oder zu einer weniger umfangreichen Berechtigung zurückzukehren.
Interaktion zwischen Berechtigungselementen
Obwohl der Berechtigungsstatus letztlich an die zugrunde liegende Anwendung gebunden ist, meldet jedes Berechtigungsobjekt seinen eigenen Status unabhängig von allen anderen Objekten und muss bei Bedarf unabhängig angefordert werden.
Die Anforderung des Kalenderzugriffs für ein Objekt aktualisiert beispielsweise nicht den Status eines anderen CalendarPermission Objekts, selbst wenn diese die exakt gleichen Eigenschaften haben.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.