プライバシー インジケーター

Android では、次のタイプのアクセスについてプライバシー インジケーターを表示することで、ユーザーに対する透明性を確保しています。

ユーザーはインジケーターをタップして、どのアプリがデータにアクセスしたかを確認できます。

アクティブな使用と最近の使用

Android UI では、実行中の使用と最近の使用が区別されます。

  • Android 17 以降では、位置情報の使用がシステムによって「実行中」とマークされている場合、または過去 10 秒未満の場合、アクティブと見なされます。位置情報のドットの場合、 システム以外のアプリがフォアグラウンド状態で実行されている場合、アクセスはアクティブと見なされます。

  • Android 12 以降では、マイクとカメラの使用がシステムによって「実行中」とマークされている場合、または過去 5 秒未満の場合、アクティブと見なされます。

ステータスバー アイコンは、アプリがマイク、カメラ、位置情報へのユーザー感知アクセスを続行するたびに表示されます。ユーザーはこれらのアイコンをタップして、どのアプリがマイク、カメラ、位置情報、またはこれらの組み合わせにアクセスしているかを確認できます。 使用中インジケーターの例を次に示します。

アクティブなアクセスを示すインジケーター

図 1.アクティブなアクセスを示す使用中インジケーター(右上隅)。

インジケーターが表示されている間、アクセスはアクティブと見なされます。最初にアイコンが表示され、アプリが閉じられるまで、または終了するまで、ドットに切り替わります。ユーザーがクイック設定を開いてインジケーターをタップすると、アプリがマイク、カメラ、位置情報、またはこれらの組み合わせを使用しているかどうかを示すダイアログが表示されます。

図 2 は、実行中のアプリがアクティブな時間枠内にデータにアクセスしたときのアクティブなアクセスのインジケーターを示しています。

アクティブなアクセスと最近のアクセスを示すインジケーターとソース

図 2.アクティブなアクセスと最近のアクセスを示すインジケーター。

最近のアクセスのインジケーターは、過去 15 秒以内(位置情報データの場合は 20 秒以内)にアプリがデータにアクセスしたが、今はアプリがアクティブでないことを示しています。ダイアログにはアクティブなアプリがすべて表示されますが、過去 15 秒または 20 秒以内に複数のアプリがデータにアクセスした場合でも、最近アクセスしたアプリとして表示されるアプリは 1 つだけです。アクティブな時間枠または最近の時間枠内に位置情報データにアクセスしたアプリはすべて、ダイアログに表示されます。ユーザーが通知ダイアログを閉じるまで、アクセスビューは表示されたままになります。

配信と有効化

PermissionManager クラスは、ダイアログ(システム UI 内にある)に情報を移入するメソッドを提供します。システム UI は、デバイス設定スイッチ privacy/mic_camera_indicators_enabled に反応します。このスイッチが必要なのは、2 つの別個の配信手段が次の順序で存在するためです。(1)配信、次に(2)有効化。

プロセスフロー

権限インジケーター機能は、次の 3 つの主要部分で構成されています。

  • アプリ
  • インジケーター(システム UI が処理)
  • データを使用しているアプリを識別する方法

PermissionController は、どのアプリがデータを使用しているかを判断するメカニズムを提供します。システム UI は、限定公開データを使用するアプリをリッスンします。システム UI は、使用される権限に対応するアイコンを上部のナビゲーション バーに表示します。ユーザーがアイコンをクリックすると、PermissionController は使用状況に関するデータを表示します。

権限インジケーター機能のプロセスフロー

図 3.システム コンポーネントと(UI の)遷移フロー。

  • 1 アプリがシステムからの限定公開データをリクエストします。

  • 2 システムが権限を確認します。権限が許可されている場合、システムはデータ プロバイダに通知し、使用状況を app-op に記録します。

  • 3 データ プロバイダがアプリにデータを提供します。

  • 4-5 ユーザーがアイコンをクリックします。システム UI は PermissionManager からのデータをリクエストし、ユーザーにダイアログを表示します。

プロセスの詳細

App ops は、ランタイム権限で保護された API へのアクセスを記録し、アクティビティ ステータスと個々の API 呼び出しの回数を追跡し、カメラ、マイク、インジケーターを操作して、アプリがデバイスの音声データとカメラデータにアクセスしたときにユーザーに提示します。

  1. アプリは、AppOpsManager.startOpstopOpnoteOp を呼び出して、マイク、カメラ、位置情報を使用します。これにより、システム サーバーに app-op レコードが作成されます。17 以降では、位置情報インジケーターもこれらの app-op レコードを使用します。

  2. システム UI は、AppOpsManager.OnOpActiveChangedInternalListener リスナーと OnOpNotedListener リスナーを使用して新しい app-op をリッスンします。新しい使用が(startOp または noteOp の呼び出しによって)発生すると、システム UI はその使用がシステムアプリによるものかどうかを確認します。

    • システム UI は、システムアプリによる使用であることを確認した場合、マイクの使用であれば、マイクがミュートされているかどうかをチェックします。

    • システム UI は、システム以外のアプリによる使用を確認した場合(マイクの使用であればマイクがミュートされていないことを確認し、カメラの使用であればカメラがオンに切り替えられていることを確認して)、使用状況を反映するアイコンを表示します。

    • システム UI は、システム以外のアプリによる使用を確認した場合、関連する切り替えが有効であれば、使用状況を反映するアイコンを表示します。

      • マイクの場合: マイクがミュートされていない。
      • カメラの場合: カメラがオンに切り替えられている。
      • 位置情報の場合: アプリがフォアグラウンド状態で実行されている。

システム UI は、期間を持たない noteOp を受信した場合、アイコンを 5 秒以上(位置情報の場合は 10 秒以上)表示します。それ以外の場合は、stopOp を受信するか、最小期間の 5 秒または 10 秒経過するまで(どちらか長いほう)アイコンを表示します。ユーザーがアイコンをクリックすると、PermissionController に移動してダイアログを起動するインテントを開始します。

PermissionController は、マイク、カメラ、位置情報の最近の使用状況をすべて読み込みます。そして、いずれかの使用が実行中か、またはシステム UI によって設定された期間内に実行中であったかをチェックします(マイクまたはカメラの場合は 15 秒、位置情報の場合は 20 秒)。一致するものが見つかった場合は、アプリの名前と使用されている権限が表示されます。

テレフォニーは、Android Google 検索アプリ(AGSA)および GMS と連携しつつ、(通話で使用される個別のマイクスタックに対応するために)権限の使用を実装する必要があります。