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.

BluetoothPermission

Zugriff auf die Bluetooth-Peripheriegeräte des Benutzers

CalendarPermission

Zugriff auf den Kalender des Benutzers

CameraPermission

Zugriff auf die Kamera des Benutzers

ContactsPermission

Zugriff auf die Kontakte des Benutzers

LocationPermission

Zugriff auf den Standort des Benutzers

MicrophonePermission

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.