Android 6以降のランタイム権限により、ユーザーは、デバイスのマイクからのオーディオまたはデバイスのカメラからのビデオをいつ記録できるかを制御できます。アプリが記録する前に、ユーザーはシステムが表示するダイアログを介してアプリに権限を付与または拒否する必要があります。
Android 12は、アプリがカメラとマイクのアプリ操作権限を介してプライベートデータソースを使用するときにインジケーターを表示することで、ユーザーに透明性を提供します。 App-opsは、ランタイム権限で保護されたAPIへのアクセスを記録します。
App-opは、アクティビティステータスと個々のAPI呼び出しの数の両方を追跡し、Android 12のマイクとカメラのインジケーターを操作して、アプリがデバイスのオーディオとカメラのデータにアクセスしたことをユーザーに示します。ユーザーがマイクまたはカメラのインジケーターをクリックすると、データにアクセスしたアプリが表示されます。この機能はすべてのOEMに必須です。
インジケーターの可視性要件
Android12以降で実行されているデバイスのマイクとカメラのインジケーターの要件は次のとおりです。
- インジケータはステータスバーに表示され、最高の視覚的優先度を維持する必要があります(たとえば、右上隅の右端の位置にあります)。
- インジケーターは常に同じ位置に配置する必要があり、アプリの起動時にアプリによってブロックされないようにする必要があります。
- 両方のインジケーターの色は緑色(または緑色のバリエーション)である必要があります。
- 一方または両方のインジケーターをクリックすると、次のようなアプリケーションアフォーダンス通知を表示する必要があります。
- マイクと(または)カメラを使用しているアプリの名前を表示します
- 過去15秒以内にマイクおよび(または)カメラを使用したアプリの名前を表示します
- ユーザーを[設定]のアプリ許可ページに移動します
使用法と機能
Android 12では、UIは実行中の使用状況と最近の使用状況を区別します。使用状況は、システムによって「実行中」とマークされているか、5秒未満経過している場合に「アクティブ」と見なされます。
- ステータスバーのアイコンは、アプリがユーザーに依存するマイクまたはカメラへのアクセスを継続しているたびに表示されます。
- ユーザーはこれらのアイコンをクリックして、マイク、カメラ、またはその両方にアクセスしているアプリを確認できます。
図1.アクティブアクセスを示すマイクとカメラの使用中インジケーター(右上隅)
インジケーターが表示されている限り、アクセスはアクティブであると見なされます。アイコンが最初に表示され、次にアプリが閉じられるか閉じられるまで続くドットに移行します。
ユーザーがインジケーターをタップすると、ダイアログボックスが表示され、アプリが現在カメラ、マイク、またはその両方を使用していることが示されます。
図2.アクティブおよび最近のアクセスインジケーター
図2の画像は、実行中のアプリが過去5秒間にデータにアクセスしたときのアクティブなアクセスインジケーターを示しています。
最近のアクセスインジケーターは、過去15秒間にアプリがデータにアクセスしたが、アプリがアクティブではないことを示しています。すべてのアクティブなアプリがダイアログに表示されますが、過去15秒の時間枠内に複数のアプリがデータにアクセスした場合でも、最近のアクセスのソースとして表示されるのは1つのアプリのみです。ユーザーが通知ダイアログを閉じるまで、アクセスビューはフリーズしたままです。
配信して有効にする
PermissionManager
クラスは、システムUIにあるダイアログにデータを入力するためのメソッドを提供します。
- システムUIは、デバイス構成スイッチ(
privacy/mic_camera_indicators_enabled
に反応します。 - 次の順序で2つの別々の配送車両があるため、切り替えが必要です。
- 配達。
- 有効。
-
PermissionManager
のメソッドが必要なデータを提供できない場合でも、システムUIがクラッシュしてはなりません。
プロセスフロー
権限インジケータ機能には、次の3つの主要部分があります。
- アプリ
- インジケーター(SystemUIによって処理されます)
- データを使用しているアプリを特定する方法
PermissionController
は、データを使用しているアプリを判別するメカニズムを提供します。 SystemUIは、プライベートデータを使用してアプリをリッスンします。 SystemUIは、使用されている権限に対応するアイコンを上部のナビゲーションバーに表示します。 PermissionController
は、ユーザーがアイコンをクリックしたときに使用状況に関するデータを表示します。
図3.システムコンポーネントと(UI)遷移フロー
図3の番号付き遷移について以下に説明します。
1-アプリがシステムにプライベートデータを要求します。
2-システムは権限をチェックします。権限が許可されている場合、システムはデータプロバイダーに通知し、app-opsでの使用状況を記録します
3-データプロバイダーはアプリにデータを提供します。
4-5ユーザーがアイコンをクリックします。システムUIは、 PermissionManager
にデータを要求し、ダイアログをユーザーに表示します。
プロセスの詳細
- アプリはマイクとカメラを使用して、
AppOpsManager.startOp
、stopOp
、および(または)noteOp
を呼び出します。これにより、システムサーバーにapp-opレコードが作成されます。 - システムUIは、
AppOpsManager.OnOpActiveChangedInternalListener
およびOnOpNotedListener
リスナーを使用して新しいアプリ操作をリッスンします。 (startOp
またはnoteOp
のいずれかを呼び出して)新しい使用法が導入されると、システムUIは、その使用法がシステムアプリによるものであることを確認します。 - システムUIがシステムアプリの使用状況を確認し、使用状況がマイク用である場合、システムUIはマイクがミュートされているかどうかを確認します。
- システムUIがシステム以外のアプリの使用状況を確認する場合(および、マイクの使用状況の場合はマイクがミュートされていないこと、カメラの使用状況の場合はカメラがオンになっていること)、そのような使用状況を反映するアイコンが表示されます。
システムUIが継続時間のないnoteOp
を受信した場合、少なくとも5秒間アイコンが表示されます。それ以外の場合、アイコンはstopOp
を受信するまで、または5秒間のいずれか長い方で表示されます。ユーザーがアイコンをクリックすると、 PermissionController
に移動してダイアログを開始するインテントが開始されます。
PermissionController
は、マイクとカメラの最近の使用法をすべてロードします。それらのいずれかが現在実行されているかどうか、またはシステムUIによって設定された時間枠内に実行されているかどうかを確認します。一致するものが見つかると、権限を使用したアプリの名前と、アプリが使用した権限が表示されます。
Android 12以降でのこの変更により、一部のアプリは動作を変更するか、特別な動作を実装する必要があります。
テレフォニーは、Android Google検索アプリ(AGSA)およびGoogleモバイルサービス(GMS)を使用しながら、(通話で使用される個別のマイクスタックを考慮して)権限の使用を実装する必要があります。