QML アプリケーションの権限
今日のデバイスやオペレーティングシステムの多くの機能は、誤用された場合、プライバシー、セキュリティ、およびパフォーマンスに重大な影響を及ぼす可能性があります。そのため、これらの機能にアクセスする前にユーザーからの明示的な同意を求めるプラットフォームがますます一般的になっています。
Qt Qml コアモジュールは、クロスプラットフォームで権限の確認や要求に使用できる一連の権限タイプを通じて、QtC++のアプリケーション権限機能をQMLに提供します。
ユーザーのBluetooth周辺機器へのアクセス | |
ユーザーのカレンダーへのアクセス | |
ユーザーのカメラへのアクセス | |
ユーザーの連絡先へのアクセス | |
ユーザーの位置情報へのアクセス | |
ユーザーのマイクへのアクセス |
注: 利用可能な権限の種類は 、Qt Multimedia やQt Positioning などのQtモジュールの主要な機能を網羅していますが、プラットフォーム固有のすべての権限を網羅しているわけではありません。カスタム権限の種類は、現時点ではサポートされていません。
使用方法
アプリケーション内で特定の権限を確認または要求するには、適切な権限タイプのインスタンスを含め、必要に応じてそのプロパティを設定します:
CalendarPermission {
id: calendarPermission
accessMode: CalendarPermission.ReadWrite
}この型を使用すると、権限の現在の状態を確認できます。たとえば、状態に応じた UI を制御する場合などに利用できます:
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つのいずれかの方法で応答します:
- たとえば、プラットフォームが2つのアクセスモードを区別しないなどの理由により、拡張された権限を暗黙的に付与する場合。この場合、状態の変化は発生しません。
- ステータスを「未決定」に戻し、拡張された権限へのアクセスについてユーザーに再度確認を求める。
- ステータスを「
Denied」に変更します。これは、例えば、最初にリクエストされた時点で権限のアップグレードができない場合などです。
これらの状態のすべてにおいて、アプリケーションの UI は適切な状態に移行し、ユーザーには新しい状態が通知されます。ユーザーは、可能であれば新しい権限をリクエストするか、より範囲の狭い権限に戻すことができます。
権限項目間の相互作用
権限の状態は最終的には基盤となるアプリケーションに紐づいていますが、各権限項目は他のすべての項目とは独立して自身のステータスを報告し、必要に応じて個別にリクエストする必要があります。
たとえば、ある項目に対してカレンダーへのアクセスを要求しても、たとえそれらがまったく同じプロパティを持っていたとしても、別のCalendarPermission 項目のステータスは更新されません。
© 2026 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.