QMLアプリケーションのパーミッション

今日のデバイスやオペレーティングシステムの多くの機能は、悪用されるとプライバシー、セキュリティ、パフォーマンスに重大な影響を及ぼす可能性があります。そのため、これらの機能にアクセスする前にユーザーからの明示的な同意を必要とするプラットフォームがますます一般的になってきています。

この Qt Qml Coreモジュールは Qt C++Application Permissions の機能を QML に公開します。

BluetoothPermission

ユーザの Bluetooth 周辺機器へのアクセス

CalendarPermission

ユーザのカレンダーへのアクセス

CameraPermission

カメラへのアクセス

ContactsPermission

ユーザーの連絡先へのアクセス

LocationPermission

ユーザーの位置情報へのアクセス

MicrophonePermission

マイクへのアクセス

使用方法

アプリケーションで特定のパーミッションをチェックしリクエストするには、適切なパーミッション・タイプのインスタンスをインクルードし、必要であればそのプロパティを設定します:

CalendarPermission {
    id: calendarPermission
    accessMode: CalendarPermission.ReadWrite
}

このタイプは、パーミッションの現在の状態をチェックするために使用することができます:

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 }
    }
]

上記の例では、パーミッションのステータスが許可されていない場合、2つのパーミッション固有の項目がオーバーレイ表示されます。リクエストUIは次のようになります:

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()
    }
}

対応する拒否UIを持つ:

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.")
    }
}

パーミッションのプロパティの変更

パーミッションのプロパティは、リクエストが開始された後でも `request()` を呼び出すことで変更することができます。これは、新しいプロパティ値の結果としてステータスが変更された場合、ステータスを更新しますが、新しいプロパティセットを使った自動リクエストにはなりません。

例えば、アクセスモードQt.CalendarPermission.ReadOnly に対して既に付与されているカレンダーパーミッションをQt.CalendarPermission.ReadWrite にアップグレードする場合、プラットフォームは3つの方法のうちの1つで応答する:

  • 例えば、プラットフォームが2つのアクセスモードを区別しないため、暗黙的に拡張許可を与える。
  • ステータスを[Undetermined]に戻すことで、拡張されたパーミッションへのア クセスをユーザーに再度問い合わせることができるようにする。
  • ステータスをDenied に移動することで、例えば、最初に要求されたパーミッションのアップグレードができない場合。

これらのステータスはすべて、アプリケーションの UI を適切なステー トに移動させ、そこでユーザに新しいステータスを通知し、可能であれば新しいパーミッションを要求するか、より拡張されていないパーミッシ ョンに戻すことができるようにする。

パーミッションアイテム間の相互作用

パーミッションの状態は、最終的には基礎となるアプリケーションに結びつきますが、各パーミッションアイテムは、他のすべてのアイテムから独立してそれ自身のステータスを報告し、必要であれば独立してリクエストされる必要があります。

例えば、あるアイテムのカレンダーアクセスをリクエストしても、CalendarPermission 、他のアイテムのステータスは更新されません。

© 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.