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 アイテムのステータスは更新されません。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。