Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions) Summary: [Nested Classes](https://developer.android.com/reference/android/provider/PeopleContract#nestedclasses) \| [Constants](https://developer.android.com/reference/android/provider/PeopleContract#constants) \| [Fields](https://developer.android.com/reference/android/provider/PeopleContract#lfields) \| [Methods](https://developer.android.com/reference/android/provider/PeopleContract#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/provider/PeopleContract#inhmethods)

# PeopleContract

*** ** * ** ***


`
public

final

class
PeopleContract
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.provider.PeopleContract |

<br />

*** ** * ** ***

Defines the contract between client applications, People Directory applications (such as VoIP and
messaging services), and the system's People Provider.

The People Provider acts as a central aggregator and caching repository for person and group
identities across installed applications known as "People Directories". This contract establishes
standard procedures for two primary developer audiences:

- **People Directory applications (VoIP and Messaging Applications):** Applications that supply contact definitions to the system by declaring a `https://developer.android.com/reference/android/content/ContentProvider` registered with the manifest property `https://developer.android.com/reference/android/provider/PeopleContract.Directory#DIRECTORY_PROPERTY`. People Directory applications notify the system of data changes via `https://developer.android.com/reference/android/provider/PeopleContract.Directory#notifyChange(android.content.Context,%20android.net.Uri,%20android.os.Bundle,%20android.os.CancellationSignal)` and handle interaction requests via `https://developer.android.com/reference/android/provider/PeopleContract.Intents#ACTION_START_PEOPLE_INTERACTION`.
- **Client applications (Queriers):** Applications (such as dialers, contacts apps, or system UI) that query available directories, retrieve aggregated person and group records, observe data changes, and request secure interaction intents (such as messaging, audio calling, or video calling).

### Overview

The interaction between People Directories, the People Provider, and client applications
follows a standard lifecycle:

1. **Query:** A client application queries the People Provider with `https://developer.android.com/reference/android/provider/PeopleContract.Persons#CONTENT_URI` or `https://developer.android.com/reference/android/provider/PeopleContract.Groups#CONTENT_URI` for person or group records.
2. **Database lookup and fetch:** The People Provider immediately returns any records from the local database. If target records from a specific People Directory are missing or expired, the People Provider triggers debounced, scheduled background maintenance jobs to fetch data from the registered People Directory. Note that these scheduled jobs may not run immediately.
3. **Backfill and notify:** The People Provider stores the returned records in its local database and alerts the client application via a `https://developer.android.com/reference/android/database/ContentObserver` on the notification URI (see `https://developer.android.com/reference/android/provider/PeopleContract#EXTRA_NOTIFICATION_URI`). The client application then re-queries to retrieve the updated records from the local database.
4. **Interaction:** To start an interaction (such as messaging, audio calling, or video calling), the client application requests a `https://developer.android.com/reference/android/app/PendingIntent` from the People Provider (see `https://developer.android.com/reference/android/provider/PeopleContract#createPeopleInteractionRequest(android.content.ContentResolver,%20java.lang.String,%20android.os.Bundle)`), which routes the request securely to the target People Directory application's interaction Activity.

### Implementing a People Directory

For applications wishing to integrate as a People Directory and surface their user network in
system calling and messaging flows, follow these implementation requirements:

1. **Manifest Declaration:** Declare an exported `https://developer.android.com/reference/android/content/ContentProvider` in your package manifest. Within the provider declaration, include a `<property>` tag for `https://developer.android.com/reference/android/provider/PeopleContract.Directory#DIRECTORY_PROPERTY` set to `true` so the system discovers your service during app scanning:

       <provider android:name=".MyPeopleDirectoryProvider"
                 android:authorities="com.example.app.people"
                 android:exported="true">
           <property android:name="android.content.PeopleDirectory" android:value="true" />
       </provider>

   You could also use `android:readPermission="android.permission.BIND_DIRECTORY_SEARCH"` to restrict access to the directory to the system only.

   **Note:** An application may register at most one People Directory. Packages
   declaring multiple directory providers are ignored by the system.
2. **Fulfilling Queries:** When the system queries your provider, it invokes `https://developer.android.com/reference/android/content/ContentProvider#query(android.net.Uri,%20java.lang.String[],%20android.os.Bundle,%20android.os.CancellationSignal)` against paths matching `https://developer.android.com/reference/android/provider/PeopleContract.Persons#CONTENT_URI` or `https://developer.android.com/reference/android/provider/PeopleContract.Groups#CONTENT_URI` under your authority. The query bundle contains `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_QUERIES`, a list of sub-query argument bundles specifying the matching criteria (for example, phone numbers, email addresses, or lookup keys via `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_TYPE` and `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_VALUE`). Your provider must match these criteria against its app database and return a `https://developer.android.com/reference/android/database/Cursor` populating standard columns:
   - For `https://developer.android.com/reference/android/provider/PeopleContract.Persons#CONTENT_URI`, return: `https://developer.android.com/reference/android/provider/PeopleContract.Persons#LOOKUP_KEY` (required, stable opaque key), `https://developer.android.com/reference/android/provider/PeopleContract.Persons#DISPLAY_NAME`, `https://developer.android.com/reference/android/provider/PeopleContract.Persons#PHOTO_URI`, `https://developer.android.com/reference/android/provider/PeopleContract.Persons#CAPABILITY` (bitmask of `https://developer.android.com/reference/android/provider/PeopleContract.Capability` flags), as well as `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_TYPE` and `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_VALUE` corresponding to the matched query request.
   - For `https://developer.android.com/reference/android/provider/PeopleContract.Groups#CONTENT_URI`, return: `https://developer.android.com/reference/android/provider/PeopleContract.Groups#LOOKUP_KEY`, `https://developer.android.com/reference/android/provider/PeopleContract.Groups#DISPLAY_NAME`, along with `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_TYPE` and `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_VALUE`.
3. **Change Notifications:** Call `https://developer.android.com/reference/android/provider/PeopleContract.Directory#notifyChange(android.content.Context,%20android.net.Uri,%20android.os.Bundle,%20android.os.CancellationSignal)` whenever a person or group record is added, modified, or removed in your service so the provider can update its local database. Call `https://developer.android.com/reference/android/provider/PeopleContract.Directory#requestRefresh(android.content.Context,%20android.os.CancellationSignal)` after large-scale state changes (such as completing an account sync or user log-outs).
4. **Handling User Interactions:** Declare an `https://developer.android.com/reference/android/app/Activity` in your manifest with an intent filter matching `https://developer.android.com/reference/android/provider/PeopleContract.Intents#ACTION_START_PEOPLE_INTERACTION`. This Activity must declare `android:exported="true"` in the manifest to allow the People Provider to discover and launch it. It is highly recommended to protect this Activity with `android:readPermission="android.permission.BIND_DIRECTORY_SEARCH"` to restrict the creation of the Activity's `https://developer.android.com/reference/android/app/PendingIntent` to the system only, so that it shares the same restriction as queries to the People Directory.

   When launched by a client's `https://developer.android.com/reference/android/app/PendingIntent`, read `https://developer.android.com/reference/android/provider/PeopleContract.Intents#EXTRA_PEOPLE_INTERACTION_TYPE` (such as voice call, video call, or message) and
   `https://developer.android.com/reference/android/provider/PeopleContract.Intents#EXTRA_PEOPLE_QUERY_ARGS` from the intent. To extract the target record from
   the query arguments bundle, retrieve the query list via `bundle.getParcelableArrayList(QUERY_ARG_QUERIES, Bundle.class)` and inspect `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_TYPE` and `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_VALUE` to route the user
   directly into the communication session.

### Query and notification

Unlike traditional content providers that accept SQL-style selection strings, the People
Provider provides a unified, read-only query interface. Clients **must** perform queries using
`https://developer.android.com/reference/android/content/ContentResolver#query(android.net.Uri,%20java.lang.String[],%20android.os.Bundle,%20android.os.CancellationSignal)`, passing structured
query arguments (constructed via `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder` or `https://developer.android.com/reference/android/provider/PeopleContract.Groups.Query.Builder`)
in the query `https://developer.android.com/reference/android/os/Bundle`. Traditional selection-string query overloads (i.e. those using
selection and selectionArgs instead of the query Bundle), as well as modification operations
(`insert`, `update`, and `delete`), are unsupported and will throw an `https://developer.android.com/reference/java/lang/UnsupportedOperationException`.

**Background maintenance mechanism:** When a client performs a query, the People Provider
returns records from its local database immediately. If the requested data is missing or expired,
the provider enqueues debounced, scheduled maintenance jobs to backfill data from the target
People Directory into the local database. These scheduled jobs may not run immediately; for
example, global directory syncs and heavy targeted refreshes may be deferred to run when the
device is idle and charging. Because initial query results may be empty or incomplete prior to
maintenance job completion, client applications may register a `https://developer.android.com/reference/android/database/ContentObserver` on the URI returned in the cursor's extras under `https://developer.android.com/reference/android/provider/PeopleContract#EXTRA_NOTIFICATION_URI` (or on `https://developer.android.com/reference/android/provider/PeopleContract#CONTENT_NOTIFICATION_URI`). When the local database is
updated, the observer is notified, allowing the client to re-query and display the updated
records.

### Permissions

Reading data from the People Provider requires the `https://developer.android.com/reference/android/Manifest.permission#MANAGE_CONTACTS` permission.

## Summary

| ### Nested classes ||
|---|---|
| ` class` | `https://developer.android.com/reference/android/provider/PeopleContract.Capability` Bitmask flags indicating the types of communication reached or supported by a user identity in a People Directory. |
| ` class` | `https://developer.android.com/reference/android/provider/PeopleContract.Directory` Constants and utilities for registering and discovering People Directories. |
| ` class` | `https://developer.android.com/reference/android/provider/PeopleContract.Groups` Constants, URI definitions, and query utilities for group records aggregated from People Directories. |
| ` class` | `https://developer.android.com/reference/android/provider/PeopleContract.Intents` Standard intent actions, extras, and interaction constants used to bridge client applications with communication flows in People Directory applications. |
| ` class` | `https://developer.android.com/reference/android/provider/PeopleContract.Persons` Constants, URI definitions, and query utilities for person identity records aggregated from People Directories. |

| ### Constants ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/provider/PeopleContract#AUTHORITY` The authority for the People Provider. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/provider/PeopleContract#EXTRA_NOTIFICATION_URI` Key for an extra in the `https://developer.android.com/reference/android/database/Cursor` `https://developer.android.com/reference/android/os/Bundle` containing a query-specific notification URI. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_PACKAGE` Query argument key specifying the package name of the target People Directory for a sub-query. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_QUERIES` Query argument key used to pass a structured list of query requests to the People Provider. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_TYPE` Query argument key specifying the selection criterion type (for example, `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query#SELECTION_TYPE_PHONE` for phone number, `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query#SELECTION_TYPE_EMAIL` for email address, etc.). |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_VALUE` Query argument key specifying the array of values to match against for a given `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_TYPE`. |

| ### Fields ||
|---|---|
| ` public static final https://developer.android.com/reference/android/net/Uri` | `https://developer.android.com/reference/android/provider/PeopleContract#AUTHORITY_URI` A content:// style URI to the authority for the People Provider. |
| ` public static final https://developer.android.com/reference/android/net/Uri` | `https://developer.android.com/reference/android/provider/PeopleContract#CONTENT_NOTIFICATION_URI` A content:// style URI for receiving general change notifications from the People Provider. |

| ### Public methods ||
|---|---|
| ` static https://developer.android.com/reference/android/app/PendingIntent` | ` https://developer.android.com/reference/android/provider/PeopleContract#createPeopleInteractionRequest(android.content.ContentResolver,%20java.lang.String,%20android.os.Bundle)(https://developer.android.com/reference/android/content/ContentResolver resolver, https://developer.android.com/reference/java/lang/String interactionType, https://developer.android.com/reference/android/os/Bundle queryArgs) ` Creates a `https://developer.android.com/reference/android/app/PendingIntent` that allows a client application to initiate an interactive communication session (such as messaging, audio calling, or video calling) with a person or group in a target People Directory application. |

### Inherited methods

From class `

https://developer.android.com/reference/java/lang/Object

` `


https://developer.android.com/reference/java/lang/Object` `
https://developer.android.com/reference/java/lang/Object#clone()()
`

Creates and returns a copy of this object.


`


boolean` `
https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj)
`

Indicates whether some other object is "equal to" this one.


`


void` `
https://developer.android.com/reference/java/lang/Object#finalize()()
`

Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.


`


final

https://developer.android.com/reference/java/lang/Class<?>` `
https://developer.android.com/reference/java/lang/Object#getClass()()
`

Returns the runtime class of this `Object`.


`


int` `
https://developer.android.com/reference/java/lang/Object#hashCode()()
`

Returns a hash code value for the object.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#notify()()
`

Wakes up a single thread that is waiting on this object's
monitor.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#notifyAll()()
`

Wakes up all threads that are waiting on this object's monitor.


`


https://developer.android.com/reference/java/lang/String` `
https://developer.android.com/reference/java/lang/Object#toString()()
`

Returns a string representation of the object.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos)
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*, or until a
certain amount of real time has elapsed.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis)
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*, or until a
certain amount of real time has elapsed.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait()()
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*.


## Constants

### AUTHORITY

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static final String AUTHORITY
```

The authority for the People Provider.

<br />

Constant Value:

"com.android.people"


### EXTRA_NOTIFICATION_URI

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static final String EXTRA_NOTIFICATION_URI
```

Key for an extra in the `https://developer.android.com/reference/android/database/Cursor` `https://developer.android.com/reference/android/os/Bundle` containing a
query-specific notification URI.

This URI is generated by the People Provider and is unique to each query.

**For client applications:** Clients can extract this URI when a cursor is returned
from a query and register a `https://developer.android.com/reference/android/database/ContentObserver` via `https://developer.android.com/reference/android/content/ContentResolver#registerContentObserver(android.net.Uri,%20boolean,%20android.database.ContentObserver)` to
stay updated on data changes. Because initial queries may return partial or empty results
while background maintenance jobs run, observing this URI allows the client to be notified
when the local database is updated so that it can re-query and update the UI.

**For People Directory applications:** People Directory implementations do not use this
key.

<br />

Constant Value:

"android.provider.extra.NOTIFICATION_URI"


### QUERY_ARG_PACKAGE

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static final String QUERY_ARG_PACKAGE
```

Query argument key specifying the package name of the target People Directory for a
sub-query.

<br />

Constant Value:

"android:query-arg-package"


### QUERY_ARG_QUERIES

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static final String QUERY_ARG_QUERIES
```

Query argument key used to pass a structured list of query requests to the People Provider.

The value must be an `https://developer.android.com/reference/java/util/ArrayList` of `https://developer.android.com/reference/android/os/Bundle` objects, where each bundle
represents selection criteria targeting a specific directory package.

**For client applications:** Rather than constructing these bundles manually, clients
should use `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder` or `https://developer.android.com/reference/android/provider/PeopleContract.Groups.Query.Builder` to create the query
bundle.

**For People Directory applications:** When the People Provider dispatches query
requests to a People Directory application, it passes query argument bundles containing this
key so the application can inspect and fulfill the requested criteria.

<br />

Constant Value:

"android:query-arg-queries"


### QUERY_ARG_SELECTION_TYPE

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static final String QUERY_ARG_SELECTION_TYPE
```

Query argument key specifying the selection criterion type (for example, `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query#SELECTION_TYPE_PHONE` for phone number, `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query#SELECTION_TYPE_EMAIL` for email address, etc.).

In query argument bundles, this key maps to a string specifying which attribute to search
in the directory (e.g., phone numbers or email addresses).

In query cursors returned by a People Directory, this must be included as a `TEXT`
column containing the selection criterion type string that caused that record to match.

<br />

Constant Value:

"android:query-arg-selection-type"


### QUERY_ARG_SELECTION_VALUE

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static final String QUERY_ARG_SELECTION_VALUE
```

Query argument key specifying the array of values to match against for a given `https://developer.android.com/reference/android/provider/PeopleContract#QUERY_ARG_SELECTION_TYPE`.

In query argument bundles, this key maps to an array of strings (`String[]`)
containing the target criteria to search for in the directory (e.g., a list of phone
numbers).

In query cursors returned by a People Directory, this must be included as a `TEXT`
column containing the single matching string (e.g., the specific phone number) that matched
the record.

<br />

Constant Value:

"android:query-arg-selection-value"


## Fields

### AUTHORITY_URI

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static final Uri AUTHORITY_URI
```

A content:// style URI to the authority for the People Provider.

<br />

### CONTENT_NOTIFICATION_URI

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static final Uri CONTENT_NOTIFICATION_URI
```

A content:// style URI for receiving general change notifications from the People Provider.

**For client applications:** Clients can register a `https://developer.android.com/reference/android/database/ContentObserver` on this URI to be notified when directory data, person
records, or group records change across any directory. This observer will trigger when the
local database changes due to maintenance jobs or when People Directory applications report
updates.

**For People Directory applications:** People Directory applications trigger
notifications on this URI indirectly by invoking `https://developer.android.com/reference/android/provider/PeopleContract.Directory#notifyChange(android.content.Context,%20android.net.Uri,%20android.os.Bundle,%20android.os.CancellationSignal)` whenever their backing user records are modified.

Note: People Directory applications should not invoke `https://developer.android.com/reference/android/content/ContentResolver#notifyChange(android.net.Uri,%20android.database.ContentObserver)` on this URI directly.
Doing so will not update the People Provider local database or propagate changes to client
applications.

<br />

## Public methods

### createPeopleInteractionRequest

Added in [version 37.2](https://developer.android.com/topic/libraries/support-library/revisions)

```
public static PendingIntent createPeopleInteractionRequest (ContentResolver resolver, 
                String interactionType, 
                Bundle queryArgs)
```

Creates a `https://developer.android.com/reference/android/app/PendingIntent` that allows a client application to initiate an interactive
communication session (such as messaging, audio calling, or video calling) with a person or
group in a target People Directory application.

**For client applications:** Clients invoke this method with the desired interaction
type and a `queryArgs` bundle identifying the target person or group. The `queryArgs` bundle must be constructed using `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder` and contain exactly
one target sub-query targeting a single People Directory application. Clients can identify
targets using:

- `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder#addLookupQuery(java.lang.String,%20java.util.List<java.lang.String>)`: To target a specific person by their lookup key.
- `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder#addPhoneQuery(java.lang.String,%20java.util.List<java.lang.String>)`: To target a person by phone number.
- `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder#addEmailQuery(java.lang.String,%20java.util.List<java.lang.String>)`: To target a person by email address.
- `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder#addGroupQuery(java.lang.String,%20java.util.List<java.lang.String>)`: To target a communication session with a group by group lookup key.

The returned `https://developer.android.com/reference/android/app/PendingIntent` is minted under the People Provider's identity, enabling secure initiation of communication flows.

**For People Directory applications:** People Directory applications do not call this
method. To support interaction requests, People Directory applications must declare an
Activity in their manifest capable of handling `https://developer.android.com/reference/android/provider/PeopleContract.Intents#ACTION_START_PEOPLE_INTERACTION`. When the generated `https://developer.android.com/reference/android/app/PendingIntent` is
launched by a client, the People Directory application receives an Intent containing `https://developer.android.com/reference/android/provider/PeopleContract.Intents#EXTRA_PEOPLE_INTERACTION_TYPE` and `https://developer.android.com/reference/android/provider/PeopleContract.Intents#EXTRA_PEOPLE_QUERY_ARGS`. Based
upon the `https://developer.android.com/reference/android/provider/PeopleContract.Intents#EXTRA_PEOPLE_INTERACTION_TYPE` and `https://developer.android.com/reference/android/provider/PeopleContract.Intents#EXTRA_PEOPLE_QUERY_ARGS`, People Directory applications should inspect the selection
type and values to start the desired communication session for the matching person or group.

<br />

| Parameters ||
|---|---|
| `resolver` | `ContentResolver`: The `https://developer.android.com/reference/android/content/ContentResolver` used to interact with the People Provider. This value cannot be `null`. <br /> |
| `interactionType` | `String`: The desired type of communication, which must be one of the `PEOPLE_INTERACTION_TYPE_*` constants defined in `https://developer.android.com/reference/android/provider/PeopleContract.Intents`. This value cannot be `null`. <br /> |
| `queryArgs` | `Bundle`: A query arguments `https://developer.android.com/reference/android/os/Bundle` identifying the target person or group. This bundle must contain exactly one target sub-query generated using `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder` (e.g. via `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder#addLookupQuery(java.lang.String,%20java.util.List<java.lang.String>)`, `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder#addPhoneQuery(java.lang.String,%20java.util.List<java.lang.String>)`, `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder#addEmailQuery(java.lang.String,%20java.util.List<java.lang.String>)`, or `https://developer.android.com/reference/android/provider/PeopleContract.Persons.Query.Builder#addGroupQuery(java.lang.String,%20java.util.List<java.lang.String>)`). This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/app/PendingIntent` | A `https://developer.android.com/reference/android/app/PendingIntent` configured to launch the interaction Activity in the target directory application, or `null` if the request could not be processed. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if `queryArgs` is malformed, does not contain exactly one target sub-query, or specifies a target package that is not recognized as a registered People Directory or does not handle `https://developer.android.com/reference/android/provider/PeopleContract.Intents#ACTION_START_PEOPLE_INTERACTION`. |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if any argument is null. |