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

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