Android の連絡先選択ツールは、ユーザーが特定の連絡先をアプリと共有できる、プライバシーを保護する標準インターフェースを提供します。Android 17 で導入されたこの機能は、広範な READ_CONTACTS 権限の権限なしの代替手段として機能します。
連絡先選択ツールを使用することで、アプリは電話番号やメールアドレスなどの特定の連絡先データへのアクセスをリクエストできます。ユーザーが共有する連絡先を選択すると、システムはアプリにその詳細情報のみへの一時的な読み取りアクセス権を付与します。
アーキテクチャ
連絡先選択ツールは、次の 2 つの主要コンポーネントで構成されています。
- ピッカー UI アプリ: このコンポーネントは、連絡先を選択するためのユーザー向けインターフェースとして機能します。
- セッション プロバイダ: このコンポーネントは、一時アクセス セッションを管理するバックエンド サービスとして機能します。

図 1. シーケンス図
Picker UI
Picker UI は、連絡先の選択のユーザー インターフェースを処理し、連絡先プロバイダに直接クエリを実行して、リクエストされたデータ型に基づいてビューを入力します。サポートされているビューは次のとおりです。
- 電話番号のみ: 電話番号を含む連絡先が UI に表示されます。
- メールのみ: メールアドレスを含む連絡先が UI に表示されます。
- カスタム連絡先情報: UI に、リクエストされた特定のデータ フィールドに一致する連絡先が表示されます。
また、UI は次の機能をサポートしています。
- アルファベット順に並べ替えられたリスト: 連絡先は重複排除され、アルファベット順に並べ替えられます。
- 連絡先アバター: UI に連絡先の写真またはアバターが表示されます。
- お気に入り: [お気に入り] カテゴリが連絡先リストの上部に表示されます。
- プロファイル切り替え: この機能を使用すると、ユーザーはさまざまなユーザー プロファイル(仕事用と個人用など)から連絡先を選択できます。
- 単一選択と複数選択: 単一選択モードと複数選択モードの両方がサポートされています(デフォルトの上限は 50、最大値は 100)。
- 選択のプレビュー: ユーザーは、選択した連絡先を確認する前にプレビューして管理できます。
- 高速スクロール: この機能を使用すると、連絡先リストをすばやく移動できます。
- 検索: 特定の連絡先を検索するための検索バーが表示されます。
- プライバシー バナーとプライバシーの詳細ページ: 必須の通知で、アプリがリクエストしているデータ フィールド(電話番号、メールアドレスなど)をユーザーに正確に伝えます。
セッション プロバイダ
セッション プロバイダ(packages/providers/ContactsProvider)は、クライアント アプリと連絡先プロバイダ間の安全な仲介役として機能します。
- 役割:
Intent.ACTION_PICK_CONTACTSを使用してピッカーを起動する場合にのみ、セッション プロバイダを使用します。 - セッション管理: ユーザーが連絡先を選択すると、ピッカー UI は選択データ(クライアントの UID にマッピング)をセッション プロバイダに書き込みます。
- データアクセス: プロバイダは
content://com.android.providers.contacts.picker.sessionsURI を選択ツールに返します。選択ツールは、URI をクライアント アプリに返す前に適切な読み取りフラグを適用します。この URI により、連絡先のすべてのデータを公開することなく、ユーザーが選択した特定のデータ フィールドに対する一時的な読み取りアクセス権が付与されます。 - 特権アクセス:
android.permission.MANAGE_CONTACTS_PICKER_SESSIONシグネチャと特権により、セッション プロバイダへの書き込みアクセスが保護され、信頼できるシステム ピッカーのみがセッションを作成できるようになります。
統合
ハードウェア メーカーとパートナーは、Android 17 以降のビルドに Android 連絡先選択ツールを含める必要があります。
サポートされているインテント
Intent.ACTION_PICK_CONTACTS: Android 17 以上をターゲットとするアプリにおすすめのインテント。Intent.ACTION_PICK: 下位互換性のために維持されています。システムは、これらのリクエストをサポートされている MIME タイプ(メール、電話、連絡先)の新しいピッカーに自動的にルーティングします。
セッション管理
デバイスの健全性とプライバシーを維持するため、セッション プロバイダは厳格なデータ クリーンアップ ポリシーを適用します。
- クリーンアップ ジョブ: 24 時間以上経過したセッションデータを削除するために、システムジョブ(
CleanupJobService)が定期的に実行されます。 - 行数上限: ストレージ使用量が過剰にならないように、セッション プロバイダ テーブルの行数は最大 5, 000 行に制限されています。テーブルがこのサイズに達すると、システムは新しいセッション データを挿入する前に、最も古い行を自動的に削除します。
- 永続性: セッション データは一時的です。クライアント アプリは、返された連絡先データを受信したらすぐに永続化することが想定されています。
権限
セッション プロバイダへの書き込みアクセスには android.permission.MANAGE_CONTACTS_PICKER_SESSION 権限が必要です。この権限は Android 連絡先選択ツール パッケージに制限されています。
カスタマイズとコンプライアンス
パートナーはフォントや色などの視覚要素をカスタマイズできますが、実装は Android CDD のセクション 3.18.2(未定)に準拠する必要があります。
検証
パートナーは、互換性テストスイート(CTS)と Google モバイル サービス テストスイート(GTS)の両方を使用して実装を検証する必要があります。