Android 6 以降では実行時の権限により、デバイスのマイクからの音声またはデバイスのカメラからの動画の記録を許可するタイミングを制御できます。アプリによる記録が可能になる前に、システムが表示するダイアログでユーザーがアプリに対して権限を付与または拒否する必要があります。
Android 12 では、アプリがカメラとマイクの app-op 権限を通じて限定公開データソースを使用している場合、インジケーターによってユーザーに対する透明性が確保されます。app-op は、実行時の権限で保護された API へのアクセスを記録します。
app-op は、アクティビティ ステータスと個々の API 呼び出しの回数の両方をトラッキングし、Android 12 のマイクとカメラのインジケーターとやり取りして、アプリがデバイス上の音声データとカメラデータにアクセスしたときにユーザーに示します。ユーザーがマイクまたはカメラのインジケーターをクリックすると、そのユーザーのデータにアクセスしたアプリが表示されます。この機能は、すべての OEM で必須です。
インジケーターの表示に関する要件
Android 12 以降を搭載したデバイスにおけるマイクとカメラのインジケーターの要件は次のとおりです。
- インジケーターはステータスバーに表示され、常に視覚的に最優先される(たとえば、右上隅の一番右に配置される)必要があります。
- インジケーターは常に同じ位置に配置される必要があります。アプリの起動時にブロックされてはなりません。
- 両方のインジケーターの色は緑(または緑のバリエーション)でなければなりません。
- 一方または両方のインジケーターをクリックすると、以下の処理を行うアプリ アトリビューション アフォーダンス通知が表示される必要があります。
- マイクおよび / またはカメラを使用しているアプリの名前を表示する
- 過去 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-op に記録します。
3 データ プロバイダがアプリにデータを提供します。
4-5 ユーザーがアイコンをクリックします。システム UI は PermissionManager
からのデータをリクエストし、ユーザーにダイアログを表示します。
プロセスの詳細
- アプリがマイクとカメラを使用し、
AppOpsManager.startOp
、stopOp
、および / またはnoteOp
を呼び出します。これにより、システム サーバーに app-op レコードが作成されます。 - システム UI は、
AppOpsManager.OnOpActiveChangedInternalListener
リスナーとOnOpNotedListener
リスナーを使用して新しい app-op をリッスンします。新しい使用が(startOp
またはnoteOp
の呼び出しによって)発生すると、システム UI はその使用がシステムアプリによるものかどうかを確認します。 - システム UI は、システムアプリによる使用であることを確認した場合、マイクの使用であれば、マイクがミュートされているかどうかをチェックします。
- システム UI は、システム以外のアプリによる使用を確認した場合(マイクの使用であればマイクがミュートされていないことを確認し、カメラの使用であればカメラがオンに切り替えられていることを確認して)、使用状況を反映するアイコンを表示します。
システム UI は、期間を持たない noteOp
を受信した場合、アイコンを 5 秒以上表示します。それ以外の場合は、stopOp
を受信するか 5 秒経過するまで(どちらか長いほう)アイコンを表示します。ユーザーがアイコンをクリックすると、PermissionController
に移動してダイアログを起動するインテントを開始します。
PermissionController
は、マイクとカメラの最近の使用状況をすべて読み込みます。そして、いずれかの使用が実行中か、またはシステム UI によって設定された期間内に実行中であったかをチェックします。条件と一致するものが見つかった場合は、権限を使用したアプリの名前と、アプリが使用した権限を表示します。
Android 12 以降でのこの変更により、一部のアプリは動作を変更するか、特別な動作を実装する必要があります。
テレフォニーは、Android Google 検索アプリ(AGSA)および Google モバイル サービス(GMS)と連携しつつ、(通話で使用される個別のマイクスタックに対応するために)権限の使用を実装する必要があります。