Intentpublic class Intent extends Object implements android.os.Parcelable, CloneableAn intent is an abstract description of an operation to be performed. It
can be used with {@link Context#startActivity(Intent) startActivity} to
launch an {@link android.app.Activity},
{@link android.content.Context#sendBroadcast(Intent) broadcastIntent} to
send it to any interested {@link BroadcastReceiver BroadcastReceiver} components,
and {@link android.content.Context#startService} or
{@link android.content.Context#bindService} to communicate with a
background {@link android.app.Service}.
An Intent provides a facility for performing late runtime binding between the code in
different applications. Its most significant use is in the launching of activities, where it
can be thought of as the glue between activities. It is basically a passive data structure
holding an abstract description of an action to be performed.
Intent Structure
The primary pieces of information in an intent are:
-
action -- The general action to be performed, such as
{@link #ACTION_VIEW}, {@link #ACTION_EDIT}, {@link #ACTION_MAIN},
etc.
-
data -- The data to operate on, such as a person record
in the contacts database, expressed as a {@link android.net.Uri}.
Some examples of action/data pairs are:
-
{@link #ACTION_VIEW} content://contacts/people/1 -- Display
information about the person whose identifier is "1".
-
{@link #ACTION_DIAL} content://contacts/people/1 -- Display
the phone dialer with the person filled in.
-
{@link #ACTION_VIEW} tel:123 -- Display
the phone dialer with the given number filled in. Note how the
VIEW action does what what is considered the most reasonable thing for
a particular URI.
-
{@link #ACTION_DIAL} tel:123 -- Display
the phone dialer with the given number filled in.
-
{@link #ACTION_EDIT} content://contacts/people/1 -- Edit
information about the person whose identifier is "1".
-
{@link #ACTION_VIEW} content://contacts/people/ -- Display
a list of people, which the user can browse through. This example is a
typical top-level entry into the Contacts application, showing you the
list of people. Selecting a particular person to view would result in a
new intent { {@link #ACTION_VIEW} content://contacts/N }
being used to start an activity to display that person.
In addition to these primary attributes, there are a number of secondary
attributes that you can also include with an intent:
-
category -- Gives additional information about the action
to execute. For example, {@link #CATEGORY_LAUNCHER} means it should
appear in the Launcher as a top-level application, while
{@link #CATEGORY_ALTERNATIVE} means it should be included in a list
of alternative actions the user can perform on a piece of data.
-
type -- Specifies an explicit type (a MIME type) of the
intent data. Normally the type is inferred from the data itself.
By setting this attribute, you disable that evaluation and force
an explicit type.
-
component -- Specifies an explicit name of a component
class to use for the intent. Normally this is determined by looking
at the other information in the intent (the action, data/type, and
categories) and matching that with a component that can handle it.
If this attribute is set then none of the evaluation is performed,
and this component is used exactly as is. By specifying this attribute,
all of the other Intent attributes become optional.
-
extras -- This is a {@link Bundle} of any additional information.
This can be used to provide extended information to the component.
For example, if we have a action to send an e-mail message, we could
also include extra pieces of data here to supply a subject, body,
etc.
Here are some examples of other operations you can specify as intents
using these additional parameters:
-
{@link #ACTION_MAIN} with category {@link #CATEGORY_HOME} --
Launch the home screen.
-
{@link #ACTION_GET_CONTENT} with MIME type
{@link android.provider.Contacts.Phones#CONTENT_URI
vnd.android.cursor.item/phone}
-- Display the list of people's phone numbers, allowing the user to
browse through them and pick one and return it to the parent activity.
-
{@link #ACTION_GET_CONTENT} with MIME type
*{@literal /}* and category {@link #CATEGORY_OPENABLE}
-- Display all pickers for data that can be opened with
{@link ContentResolver#openInputStream(Uri) ContentResolver.openInputStream()},
allowing the user to pick one of them and then some data inside of it
and returning the resulting URI to the caller. This can be used,
for example, in an e-mail application to allow the user to pick some
data to include as an attachment.
There are a variety of standard Intent action and category constants
defined in the Intent class, but applications can also define their own.
These strings use java style scoping, to ensure they are unique -- for
example, the standard {@link #ACTION_VIEW} is called
"android.intent.action.VIEW".
Put together, the set of actions, data types, categories, and extra data
defines a language for the system allowing for the expression of phrases
such as "call john smith's cell". As applications are added to the system,
they can extend this language by adding new actions, types, and categories, or
they can modify the behavior of existing phrases by supplying their own
activities that handle them.
Intent Resolution
There are two primary forms of intents you will use.
-
Explicit Intents have specified a component (via
{@link #setComponent} or {@link #setClass}), which provides the exact
class to be run. Often these will not include any other information,
simply being a way for an application to launch various internal
activities it has as the user interacts with the application.
-
Implicit Intents have not specified a component;
instead, they must include enough information for the system to
determine which of the available components is best to run for that
intent.
When using implicit intents, given such an arbitrary intent we need to
know what to do with it. This is handled by the process of Intent
resolution, which maps an Intent to an {@link android.app.Activity},
{@link BroadcastReceiver}, or {@link android.app.Service} (or sometimes two or
more activities/receivers) that can handle it.
The intent resolution mechanism basically revolves around matching an
Intent against all of the <intent-filter> descriptions in the
installed application packages. (Plus, in the case of broadcasts, any {@link BroadcastReceiver}
objects explicitly registered with {@link Context#registerReceiver}.) More
details on this can be found in the documentation on the {@link
IntentFilter} class.
There are three pieces of information in the Intent that are used for
resolution: the action, type, and category. Using this information, a query
is done on the {@link PackageManager} for a component that can handle the
intent. The appropriate component is determined based on the intent
information supplied in the AndroidManifest.xml file as
follows:
-
The action, if given, must be listed by the component as
one it handles.
-
The type is retrieved from the Intent's data, if not
already supplied in the Intent. Like the action, if a type is
included in the intent (either explicitly or implicitly in its
data), then this must be listed by the component as one it handles.
- For data that is not a
content: URI and where no explicit
type is included in the Intent, instead the scheme of the
intent data (such as http: or mailto: ) is
considered. Again like the action, if we are matching a scheme it
must be listed by the component as one it can handle.
-
The categories, if supplied, must all be listed
by the activity as categories it handles. That is, if you include
the categories {@link #CATEGORY_LAUNCHER} and
{@link #CATEGORY_ALTERNATIVE}, then you will only resolve to components
with an intent that lists both of those categories.
Activities will very often need to support the
{@link #CATEGORY_DEFAULT} so that they can be found by
{@link Context#startActivity Context.startActivity()}.
For example, consider the Note Pad sample application that
allows user to browse through a list of notes data and view details about
individual items. Text in italics indicate places were you would replace a
name with one specific to your own package.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.notepad">
<application android:icon="@drawable/app_notes"
android:label="@string/app_name">
<provider class=".NotePadProvider"
android:authorities="com.google.provider.NotePad" />
<activity class=".NotesList" android:label="@string/title_notes_list">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
</activity>
<activity class=".NoteEditor" android:label="@string/title_note">
<intent-filter android:label="@string/resolve_edit">
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.INSERT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
</activity>
<activity class=".TitleEditor" android:label="@string/title_edit_title"
android:theme="@android:style/Theme.Dialog">
<intent-filter android:label="@string/resolve_title">
<action android:name="com.android.notepad.action.EDIT_TITLE" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.ALTERNATIVE" />
<category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
</activity>
</application>
</manifest>
The first activity,
com.android.notepad.NotesList , serves as our main
entry into the app. It can do three things as described by its three intent
templates:
<intent-filter>
<action android:name="{@link #ACTION_MAIN android.intent.action.MAIN}" />
<category android:name="{@link #CATEGORY_LAUNCHER android.intent.category.LAUNCHER}" />
</intent-filter>
This provides a top-level entry into the NotePad application: the standard
MAIN action is a main entry point (not requiring any other information in
the Intent), and the LAUNCHER category says that this entry point should be
listed in the application launcher.
<intent-filter>
<action android:name="{@link #ACTION_VIEW android.intent.action.VIEW}" />
<action android:name="{@link #ACTION_EDIT android.intent.action.EDIT}" />
<action android:name="{@link #ACTION_PICK android.intent.action.PICK}" />
<category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
<data mimeType:name="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
This declares the things that the activity can do on a directory of
notes. The type being supported is given with the <type> tag, where
vnd.android.cursor.dir/vnd.google.note is a URI from which
a Cursor of zero or more items (vnd.android.cursor.dir ) can
be retrieved which holds our note pad data (vnd.google.note ).
The activity allows the user to view or edit the directory of data (via
the VIEW and EDIT actions), or to pick a particular note and return it
to the caller (via the PICK action). Note also the DEFAULT category
supplied here: this is required for the
{@link Context#startActivity Context.startActivity} method to resolve your
activity when its component name is not explicitly specified.
<intent-filter>
<action android:name="{@link #ACTION_GET_CONTENT android.intent.action.GET_CONTENT}" />
<category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
This filter describes the ability return to the caller a note selected by
the user without needing to know where it came from. The data type
vnd.android.cursor.item/vnd.google.note is a URI from which
a Cursor of exactly one (vnd.android.cursor.item ) item can
be retrieved which contains our note pad data (vnd.google.note ).
The GET_CONTENT action is similar to the PICK action, where the activity
will return to its caller a piece of data selected by the user. Here,
however, the caller specifies the type of data they desire instead of
the type of data the user will be picking from.
Given these capabilities, the following intents will resolve to the
NotesList activity:
-
{ action=android.app.action.MAIN } matches all of the
activities that can be used as top-level entry points into an
application.
-
{ action=android.app.action.MAIN,
category=android.app.category.LAUNCHER } is the actual intent
used by the Launcher to populate its top-level list.
-
{ action=android.intent.action.VIEW
data=content://com.google.provider.NotePad/notes }
displays a list of all the notes under
"content://com.google.provider.NotePad/notes", which
the user can browse through and see the details on.
-
{ action=android.app.action.PICK
data=content://com.google.provider.NotePad/notes }
provides a list of the notes under
"content://com.google.provider.NotePad/notes", from which
the user can pick a note whose data URL is returned back to the caller.
-
{ action=android.app.action.GET_CONTENT
type=vnd.android.cursor.item/vnd.google.note }
is similar to the pick action, but allows the caller to specify the
kind of data they want back so that the system can find the appropriate
activity to pick something of that data type.
The second activity,
com.android.notepad.NoteEditor , shows the user a single
note entry and allows them to edit it. It can do two things as described
by its two intent templates:
<intent-filter android:label="@string/resolve_edit">
<action android:name="{@link #ACTION_VIEW android.intent.action.VIEW}" />
<action android:name="{@link #ACTION_EDIT android.intent.action.EDIT}" />
<category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
The first, primary, purpose of this activity is to let the user interact
with a single note, as decribed by the MIME type
vnd.android.cursor.item/vnd.google.note . The activity can
either VIEW a note or allow the user to EDIT it. Again we support the
DEFAULT category to allow the activity to be launched without explicitly
specifying its component.
<intent-filter>
<action android:name="{@link #ACTION_INSERT android.intent.action.INSERT}" />
<category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
The secondary use of this activity is to insert a new note entry into
an existing directory of notes. This is used when the user creates a new
note: the INSERT action is executed on the directory of notes, causing
this activity to run and have the user create the new note data which
it then adds to the content provider.
Given these capabilities, the following intents will resolve to the
NoteEditor activity:
-
{ action=android.intent.action.VIEW
data=content://com.google.provider.NotePad/notes/{ID} }
shows the user the content of note {ID}.
-
{ action=android.app.action.EDIT
data=content://com.google.provider.NotePad/notes/{ID} }
allows the user to edit the content of note {ID}.
-
{ action=android.app.action.INSERT
data=content://com.google.provider.NotePad/notes }
creates a new, empty note in the notes list at
"content://com.google.provider.NotePad/notes"
and allows the user to edit it. If they keep their changes, the URI
of the newly created note is returned to the caller.
The last activity,
com.android.notepad.TitleEditor , allows the user to
edit the title of a note. This could be implemented as a class that the
application directly invokes (by explicitly setting its component in
the Intent), but here we show a way you can publish alternative
operations on existing data:
<intent-filter android:label="@string/resolve_title">
<action android:name="com.android.notepad.action.EDIT_TITLE" />
<category android:name="{@link #CATEGORY_DEFAULT android.intent.category.DEFAULT}" />
<category android:name="{@link #CATEGORY_ALTERNATIVE android.intent.category.ALTERNATIVE}" />
<category android:name="{@link #CATEGORY_SELECTED_ALTERNATIVE android.intent.category.SELECTED_ALTERNATIVE}" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
In the single intent template here, we
have created our own private action called
com.android.notepad.action.EDIT_TITLE which means to
edit the title of a note. It must be invoked on a specific note
(data type vnd.android.cursor.item/vnd.google.note ) like the previous
view and edit actions, but here displays and edits the title contained
in the note data.
In addition to supporting the default category as usual, our title editor
also supports two other standard categories: ALTERNATIVE and
SELECTED_ALTERNATIVE. Implementing
these categories allows others to find the special action it provides
without directly knowing about it, through the
{@link android.content.pm.PackageManager#queryIntentActivityOptions} method, or
more often to build dynamic menu items with
{@link android.view.Menu#addIntentOptions}. Note that in the intent
template here was also supply an explicit name for the template
(via android:label="@string/resolve_title" ) to better control
what the user sees when presented with this activity as an alternative
action to the data they are viewing.
Given these capabilities, the following intent will resolve to the
TitleEditor activity:
Standard Activity Actions
These are the current standard actions that Intent defines for launching
activities (usually through {@link Context#startActivity}. The most
important, and by far most frequently used, are {@link #ACTION_MAIN} and
{@link #ACTION_EDIT}.
- {@link #ACTION_MAIN}
- {@link #ACTION_VIEW}
- {@link #ACTION_ATTACH_DATA}
- {@link #ACTION_EDIT}
- {@link #ACTION_PICK}
- {@link #ACTION_CHOOSER}
- {@link #ACTION_GET_CONTENT}
- {@link #ACTION_DIAL}
- {@link #ACTION_CALL}
- {@link #ACTION_SEND}
- {@link #ACTION_SENDTO}
- {@link #ACTION_ANSWER}
- {@link #ACTION_INSERT}
- {@link #ACTION_DELETE}
- {@link #ACTION_RUN}
- {@link #ACTION_SYNC}
- {@link #ACTION_PICK_ACTIVITY}
- {@link #ACTION_SEARCH}
- {@link #ACTION_WEB_SEARCH}
- {@link #ACTION_FACTORY_TEST}
Standard Broadcast Actions
These are the current standard actions that Intent defines for receiving
broadcasts (usually through {@link Context#registerReceiver} or a
<receiver> tag in a manifest).
- {@link #ACTION_TIME_TICK}
- {@link #ACTION_TIME_CHANGED}
- {@link #ACTION_TIMEZONE_CHANGED}
- {@link #ACTION_BOOT_COMPLETED}
- {@link #ACTION_PACKAGE_ADDED}
- {@link #ACTION_PACKAGE_CHANGED}
- {@link #ACTION_PACKAGE_REMOVED}
- {@link #ACTION_PACKAGE_RESTARTED}
- {@link #ACTION_PACKAGE_DATA_CLEARED}
- {@link #ACTION_UID_REMOVED}
- {@link #ACTION_BATTERY_CHANGED}
- {@link #ACTION_POWER_CONNECTED}
- {@link #ACTION_POWER_DISCONNECTED}
- {@link #ACTION_SHUTDOWN}
Standard Categories
These are the current standard categories that can be used to further
clarify an Intent via {@link #addCategory}.
- {@link #CATEGORY_DEFAULT}
- {@link #CATEGORY_BROWSABLE}
- {@link #CATEGORY_TAB}
- {@link #CATEGORY_ALTERNATIVE}
- {@link #CATEGORY_SELECTED_ALTERNATIVE}
- {@link #CATEGORY_LAUNCHER}
- {@link #CATEGORY_INFO}
- {@link #CATEGORY_HOME}
- {@link #CATEGORY_PREFERENCE}
- {@link #CATEGORY_TEST}
- {@link #CATEGORY_CAR_DOCK}
- {@link #CATEGORY_DESK_DOCK}
- {@link #CATEGORY_LE_DESK_DOCK}
- {@link #CATEGORY_HE_DESK_DOCK}
- {@link #CATEGORY_CAR_MODE}
- {@link #CATEGORY_APP_MARKET}
Standard Extra Data
These are the current standard fields that can be used as extra data via
{@link #putExtra}.
- {@link #EXTRA_ALARM_COUNT}
- {@link #EXTRA_BCC}
- {@link #EXTRA_CC}
- {@link #EXTRA_CHANGED_COMPONENT_NAME}
- {@link #EXTRA_DATA_REMOVED}
- {@link #EXTRA_DOCK_STATE}
- {@link #EXTRA_DOCK_STATE_HE_DESK}
- {@link #EXTRA_DOCK_STATE_LE_DESK}
- {@link #EXTRA_DOCK_STATE_CAR}
- {@link #EXTRA_DOCK_STATE_DESK}
- {@link #EXTRA_DOCK_STATE_UNDOCKED}
- {@link #EXTRA_DONT_KILL_APP}
- {@link #EXTRA_EMAIL}
- {@link #EXTRA_INITIAL_INTENTS}
- {@link #EXTRA_INTENT}
- {@link #EXTRA_KEY_EVENT}
- {@link #EXTRA_ORIGINATING_URI}
- {@link #EXTRA_PHONE_NUMBER}
- {@link #EXTRA_REFERRER}
- {@link #EXTRA_REMOTE_INTENT_TOKEN}
- {@link #EXTRA_REPLACING}
- {@link #EXTRA_SHORTCUT_ICON}
- {@link #EXTRA_SHORTCUT_ICON_RESOURCE}
- {@link #EXTRA_SHORTCUT_INTENT}
- {@link #EXTRA_STREAM}
- {@link #EXTRA_SHORTCUT_NAME}
- {@link #EXTRA_SUBJECT}
- {@link #EXTRA_TEMPLATE}
- {@link #EXTRA_TEXT}
- {@link #EXTRA_TITLE}
- {@link #EXTRA_UID}
Flags
These are the possible flags that can be used in the Intent via
{@link #setFlags} and {@link #addFlags}. See {@link #setFlags} for a list
of all possible flags. |
Fields Summary |
---|
private static final String | ATTR_ACTION | private static final String | TAG_CATEGORIES | private static final String | ATTR_CATEGORY | private static final String | TAG_EXTRA | private static final String | ATTR_TYPE | private static final String | ATTR_COMPONENT | private static final String | ATTR_DATA | private static final String | ATTR_FLAGS | public static final String | ACTION_MAINActivity Action: Start as a main entry point, does not expect to
receive data.
Input: nothing
Output: nothing | public static final String | ACTION_VIEWActivity Action: Display the data to the user. This is the most common
action performed on data -- it is the generic action you can use on
a piece of data to get the most reasonable thing to occur. For example,
when used on a contacts entry it will view the entry; when used on a
mailto: URI it will bring up a compose window filled with the information
supplied by the URI; when used with a tel: URI it will invoke the
dialer.
Input: {@link #getData} is URI from which to retrieve data.
Output: nothing. | public static final String | ACTION_DEFAULTA synonym for {@link #ACTION_VIEW}, the "standard" action that is
performed on a piece of data. | public static final String | ACTION_ATTACH_DATAUsed to indicate that some piece of data should be attached to some other
place. For example, image data could be attached to a contact. It is up
to the recipient to decide where the data should be attached; the intent
does not specify the ultimate destination.
Input: {@link #getData} is URI of data to be attached.
Output: nothing. | public static final String | ACTION_EDITActivity Action: Provide explicit editable access to the given data.
Input: {@link #getData} is URI of data to be edited.
Output: nothing. | public static final String | ACTION_INSERT_OR_EDITActivity Action: Pick an existing item, or insert a new item, and then edit it.
Input: {@link #getType} is the desired MIME type of the item to create or edit.
The extras can contain type specific data to pass through to the editing/creating
activity.
Output: The URI of the item that was picked. This must be a content:
URI so that any receiver can access it. | public static final String | ACTION_PICKActivity Action: Pick an item from the data, returning what was selected.
Input: {@link #getData} is URI containing a directory of data
(vnd.android.cursor.dir/*) from which to pick an item.
Output: The URI of the item that was picked. | public static final String | ACTION_CREATE_SHORTCUTActivity Action: Creates a shortcut.
Input: Nothing.
Output: An Intent representing the shortcut. The intent must contain three
extras: SHORTCUT_INTENT (value: Intent), SHORTCUT_NAME (value: String),
and SHORTCUT_ICON (value: Bitmap) or SHORTCUT_ICON_RESOURCE
(value: ShortcutIconResource). | public static final String | EXTRA_SHORTCUT_INTENTThe name of the extra used to define the Intent of a shortcut. | public static final String | EXTRA_SHORTCUT_NAMEThe name of the extra used to define the name of a shortcut. | public static final String | EXTRA_SHORTCUT_ICONThe name of the extra used to define the icon, as a Bitmap, of a shortcut. | public static final String | EXTRA_SHORTCUT_ICON_RESOURCEThe name of the extra used to define the icon, as a ShortcutIconResource, of a shortcut. | public static final String | ACTION_CHOOSERActivity Action: Display an activity chooser, allowing the user to pick
what they want to before proceeding. This can be used as an alternative
to the standard activity picker that is displayed by the system when
you try to start an activity with multiple possible matches, with these
differences in behavior:
- You can specify the title that will appear in the activity chooser.
- The user does not have the option to make one of the matching
activities a preferred activity, and all possible activities will
always be shown even if one of them is currently marked as the
preferred activity.
This action should be used when the user will naturally expect to
select an activity in order to proceed. An example if when not to use
it is when the user clicks on a "mailto:" link. They would naturally
expect to go directly to their mail app, so startActivity() should be
called directly: it will
either launch the current preferred app, or put up a dialog allowing the
user to pick an app to use and optionally marking that as preferred.
In contrast, if the user is selecting a menu item to send a picture
they are viewing to someone else, there are many different things they
may want to do at this point: send it through e-mail, upload it to a
web service, etc. In this case the CHOOSER action should be used, to
always present to the user a list of the things they can do, with a
nice title given by the caller such as "Send this photo with:".
If you need to grant URI permissions through a chooser, you must specify
the permissions to be granted on the ACTION_CHOOSER Intent
in addition to the EXTRA_INTENT inside. This means using
{@link #setClipData} to specify the URIs to be granted as well as
{@link #FLAG_GRANT_READ_URI_PERMISSION} and/or
{@link #FLAG_GRANT_WRITE_URI_PERMISSION} as appropriate.
As a convenience, an Intent of this form can be created with the
{@link #createChooser} function.
Input: No data should be specified. get*Extra must have
a {@link #EXTRA_INTENT} field containing the Intent being executed,
and can optionally have a {@link #EXTRA_TITLE} field containing the
title text to display in the chooser.
Output: Depends on the protocol of {@link #EXTRA_INTENT}. | public static final String | ACTION_GET_CONTENTActivity Action: Allow the user to select a particular kind of data and
return it. This is different than {@link #ACTION_PICK} in that here we
just say what kind of data is desired, not a URI of existing data from
which the user can pick. An ACTION_GET_CONTENT could allow the user to
create the data as it runs (for example taking a picture or recording a
sound), let them browse over the web and download the desired data,
etc.
There are two main ways to use this action: if you want a specific kind
of data, such as a person contact, you set the MIME type to the kind of
data you want and launch it with {@link Context#startActivity(Intent)}.
The system will then launch the best application to select that kind
of data for you.
You may also be interested in any of a set of types of content the user
can pick. For example, an e-mail application that wants to allow the
user to add an attachment to an e-mail message can use this action to
bring up a list of all of the types of content the user can attach.
In this case, you should wrap the GET_CONTENT intent with a chooser
(through {@link #createChooser}), which will give the proper interface
for the user to pick how to send your data and allow you to specify
a prompt indicating what they are doing. You will usually specify a
broad MIME type (such as image/* or {@literal *}/*), resulting in a
broad range of content types the user can select from.
When using such a broad GET_CONTENT action, it is often desirable to
only pick from data that can be represented as a stream. This is
accomplished by requiring the {@link #CATEGORY_OPENABLE} in the Intent.
Callers can optionally specify {@link #EXTRA_LOCAL_ONLY} to request that
the launched content chooser only returns results representing data that
is locally available on the device. For example, if this extra is set
to true then an image picker should not show any pictures that are available
from a remote server but not already on the local device (thus requiring
they be downloaded when opened).
If the caller can handle multiple returned items (the user performing
multiple selection), then it can specify {@link #EXTRA_ALLOW_MULTIPLE}
to indicate this.
Input: {@link #getType} is the desired MIME type to retrieve. Note
that no URI is supplied in the intent, as there are no constraints on
where the returned data originally comes from. You may also include the
{@link #CATEGORY_OPENABLE} if you can only accept data that can be
opened as a stream. You may use {@link #EXTRA_LOCAL_ONLY} to limit content
selection to local data. You may use {@link #EXTRA_ALLOW_MULTIPLE} to
allow the user to select multiple items.
Output: The URI of the item that was picked. This must be a content:
URI so that any receiver can access it. | public static final String | ACTION_DIALActivity Action: Dial a number as specified by the data. This shows a
UI with the number being dialed, allowing the user to explicitly
initiate the call.
Input: If nothing, an empty dialer is started; else {@link #getData}
is URI of a phone number to be dialed or a tel: URI of an explicit phone
number.
Output: nothing. | public static final String | ACTION_CALLActivity Action: Perform a call to someone specified by the data.
Input: If nothing, an empty dialer is started; else {@link #getData}
is URI of a phone number to be dialed or a tel: URI of an explicit phone
number.
Output: nothing.
Note: there will be restrictions on which applications can initiate a
call; most applications should use the {@link #ACTION_DIAL}.
Note: this Intent cannot be used to call emergency
numbers. Applications can dial emergency numbers using
{@link #ACTION_DIAL}, however. | public static final String | ACTION_CALL_EMERGENCYActivity Action: Perform a call to an emergency number specified by the
data.
Input: {@link #getData} is URI of a phone number to be dialed or a
tel: URI of an explicit phone number.
Output: nothing. | public static final String | ACTION_CALL_PRIVILEGEDActivity action: Perform a call to any number (emergency or not)
specified by the data.
Input: {@link #getData} is URI of a phone number to be dialed or a
tel: URI of an explicit phone number.
Output: nothing. | public static final String | ACTION_SENDTOActivity Action: Send a message to someone specified by the data.
Input: {@link #getData} is URI describing the target.
Output: nothing. | public static final String | ACTION_SENDActivity Action: Deliver some data to someone else. Who the data is
being delivered to is not specified; it is up to the receiver of this
action to ask the user where the data should be sent.
When launching a SEND intent, you should usually wrap it in a chooser
(through {@link #createChooser}), which will give the proper interface
for the user to pick how to send your data and allow you to specify
a prompt indicating what they are doing.
Input: {@link #getType} is the MIME type of the data being sent.
get*Extra can have either a {@link #EXTRA_TEXT}
or {@link #EXTRA_STREAM} field, containing the data to be sent. If
using EXTRA_TEXT, the MIME type should be "text/plain"; otherwise it
should be the MIME type of the data in EXTRA_STREAM. Use {@literal *}/*
if the MIME type is unknown (this will only allow senders that can
handle generic data streams). If using {@link #EXTRA_TEXT}, you can
also optionally supply {@link #EXTRA_HTML_TEXT} for clients to retrieve
your text with HTML formatting.
As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN}, the data
being sent can be supplied through {@link #setClipData(ClipData)}. This
allows you to use {@link #FLAG_GRANT_READ_URI_PERMISSION} when sharing
content: URIs and other advanced features of {@link ClipData}. If
using this approach, you still must supply the same data through the
{@link #EXTRA_TEXT} or {@link #EXTRA_STREAM} fields described below
for compatibility with old applications. If you don't set a ClipData,
it will be copied there for you when calling {@link Context#startActivity(Intent)}.
Optional standard extras, which may be interpreted by some recipients as
appropriate, are: {@link #EXTRA_EMAIL}, {@link #EXTRA_CC},
{@link #EXTRA_BCC}, {@link #EXTRA_SUBJECT}.
Output: nothing. | public static final String | ACTION_SEND_MULTIPLEActivity Action: Deliver multiple data to someone else.
Like {@link #ACTION_SEND}, except the data is multiple.
Input: {@link #getType} is the MIME type of the data being sent.
get*ArrayListExtra can have either a {@link #EXTRA_TEXT} or {@link
#EXTRA_STREAM} field, containing the data to be sent. If using
{@link #EXTRA_TEXT}, you can also optionally supply {@link #EXTRA_HTML_TEXT}
for clients to retrieve your text with HTML formatting.
Multiple types are supported, and receivers should handle mixed types
whenever possible. The right way for the receiver to check them is to
use the content resolver on each URI. The intent sender should try to
put the most concrete mime type in the intent type, but it can fall
back to {@literal /*} or {@literal *}/* as needed.
e.g. if you are sending image/jpg and image/jpg, the intent's type can
be image/jpg, but if you are sending image/jpg and image/png, then the
intent's type should be image/*.
As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN}, the data
being sent can be supplied through {@link #setClipData(ClipData)}. This
allows you to use {@link #FLAG_GRANT_READ_URI_PERMISSION} when sharing
content: URIs and other advanced features of {@link ClipData}. If
using this approach, you still must supply the same data through the
{@link #EXTRA_TEXT} or {@link #EXTRA_STREAM} fields described below
for compatibility with old applications. If you don't set a ClipData,
it will be copied there for you when calling {@link Context#startActivity(Intent)}.
Optional standard extras, which may be interpreted by some recipients as
appropriate, are: {@link #EXTRA_EMAIL}, {@link #EXTRA_CC},
{@link #EXTRA_BCC}, {@link #EXTRA_SUBJECT}.
Output: nothing. | public static final String | ACTION_ANSWERActivity Action: Handle an incoming phone call.
Input: nothing.
Output: nothing. | public static final String | ACTION_INSERTActivity Action: Insert an empty item into the given container.
Input: {@link #getData} is URI of the directory (vnd.android.cursor.dir/*)
in which to place the data.
Output: URI of the new data that was created. | public static final String | ACTION_PASTEActivity Action: Create a new item in the given container, initializing it
from the current contents of the clipboard.
Input: {@link #getData} is URI of the directory (vnd.android.cursor.dir/*)
in which to place the data.
Output: URI of the new data that was created. | public static final String | ACTION_DELETEActivity Action: Delete the given data from its container.
Input: {@link #getData} is URI of data to be deleted.
Output: nothing. | public static final String | ACTION_RUNActivity Action: Run the data, whatever that means.
Input: ? (Note: this is currently specific to the test harness.)
Output: nothing. | public static final String | ACTION_SYNCActivity Action: Perform a data synchronization.
Input: ?
Output: ? | public static final String | ACTION_PICK_ACTIVITYActivity Action: Pick an activity given an intent, returning the class
selected.
Input: get*Extra field {@link #EXTRA_INTENT} is an Intent
used with {@link PackageManager#queryIntentActivities} to determine the
set of activities from which to pick.
Output: Class name of the activity that was selected. | public static final String | ACTION_SEARCHActivity Action: Perform a search.
Input: {@link android.app.SearchManager#QUERY getStringExtra(SearchManager.QUERY)}
is the text to search for. If empty, simply
enter your search results Activity with the search UI activated.
Output: nothing. | public static final String | ACTION_SYSTEM_TUTORIALActivity Action: Start the platform-defined tutorial
Input: {@link android.app.SearchManager#QUERY getStringExtra(SearchManager.QUERY)}
is the text to search for. If empty, simply
enter your search results Activity with the search UI activated.
Output: nothing. | public static final String | ACTION_WEB_SEARCHActivity Action: Perform a web search.
Input: {@link android.app.SearchManager#QUERY
getStringExtra(SearchManager.QUERY)} is the text to search for. If it is
a url starts with http or https, the site will be opened. If it is plain
text, Google search will be applied.
Output: nothing. | public static final String | ACTION_ASSISTActivity Action: Perform assist action.
Input: {@link #EXTRA_ASSIST_PACKAGE}, {@link #EXTRA_ASSIST_CONTEXT}, can provide
additional optional contextual information about where the user was when they
requested the assist.
Output: nothing. | public static final String | ACTION_VOICE_ASSISTActivity Action: Perform voice assist action.
Input: {@link #EXTRA_ASSIST_PACKAGE}, {@link #EXTRA_ASSIST_CONTEXT}, can provide
additional optional contextual information about where the user was when they
requested the voice assist.
Output: nothing. | public static final String | EXTRA_ASSIST_PACKAGEAn optional field on {@link #ACTION_ASSIST} containing the name of the current foreground
application package at the time the assist was invoked. | public static final String | EXTRA_ASSIST_CONTEXTAn optional field on {@link #ACTION_ASSIST} and containing additional contextual
information supplied by the current foreground app at the time of the assist request.
This is a {@link Bundle} of additional data. | public static final String | EXTRA_ASSIST_INPUT_HINT_KEYBOARDAn optional field on {@link #ACTION_ASSIST} suggesting that the user will likely use a
keyboard as the primary input device for assistance. | public static final String | ACTION_ALL_APPSActivity Action: List all available applications
Input: Nothing.
Output: nothing. | public static final String | ACTION_SET_WALLPAPERActivity Action: Show settings for choosing wallpaper
Input: Nothing.
Output: Nothing. | public static final String | ACTION_BUG_REPORTActivity Action: Show activity for reporting a bug.
Input: Nothing.
Output: Nothing. | public static final String | ACTION_FACTORY_TESTActivity Action: Main entry point for factory tests. Only used when
the device is booting in factory test node. The implementing package
must be installed in the system image.
Input: nothing
Output: nothing | public static final String | ACTION_CALL_BUTTONActivity Action: The user pressed the "call" button to go to the dialer
or other appropriate UI for placing a call.
Input: Nothing.
Output: Nothing. | public static final String | ACTION_VOICE_COMMANDActivity Action: Start Voice Command.
Input: Nothing.
Output: Nothing. | public static final String | ACTION_SEARCH_LONG_PRESSActivity Action: Start action associated with long pressing on the
search key.
Input: Nothing.
Output: Nothing. | public static final String | ACTION_APP_ERRORActivity Action: The user pressed the "Report" button in the crash/ANR dialog.
This intent is delivered to the package which installed the application, usually
Google Play.
Input: No data is specified. The bug report is passed in using
an {@link #EXTRA_BUG_REPORT} field.
Output: Nothing. | public static final String | ACTION_POWER_USAGE_SUMMARYActivity Action: Show power usage information to the user.
Input: Nothing.
Output: Nothing. | public static final String | ACTION_UPGRADE_SETUPActivity Action: Setup wizard to launch after a platform update. This
activity should have a string meta-data field associated with it,
{@link #METADATA_SETUP_VERSION}, which defines the current version of
the platform for setup. The activity will be launched only if
{@link android.provider.Settings.Secure#LAST_SETUP_SHOWN} is not the
same value.
Input: Nothing.
Output: Nothing. | public static final String | ACTION_MANAGE_NETWORK_USAGEActivity Action: Show settings for managing network data usage of a
specific application. Applications should define an activity that offers
options to control data usage. | public static final String | ACTION_INSTALL_PACKAGEActivity Action: Launch application installer.
Input: The data must be a content: or file: URI at which the application
can be retrieved. As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1},
you can also use "package:" to install an application for the
current user that is already installed for another user. You can optionally supply
{@link #EXTRA_INSTALLER_PACKAGE_NAME}, {@link #EXTRA_NOT_UNKNOWN_SOURCE},
{@link #EXTRA_ALLOW_REPLACE}, and {@link #EXTRA_RETURN_RESULT}.
Output: If {@link #EXTRA_RETURN_RESULT}, returns whether the install
succeeded. | public static final String | EXTRA_INSTALLER_PACKAGE_NAMEUsed as a string extra field with {@link #ACTION_INSTALL_PACKAGE} to install a
package. Specifies the installer package name; this package will receive the
{@link #ACTION_APP_ERROR} intent. | public static final String | EXTRA_NOT_UNKNOWN_SOURCEUsed as a boolean extra field with {@link #ACTION_INSTALL_PACKAGE} to install a
package. Specifies that the application being installed should not be
treated as coming from an unknown source, but as coming from the app
invoking the Intent. For this to work you must start the installer with
startActivityForResult(). | public static final String | EXTRA_ORIGINATING_URIUsed as a URI extra field with {@link #ACTION_INSTALL_PACKAGE} and
{@link #ACTION_VIEW} to indicate the URI from which the local APK in the Intent
data field originated from. | public static final String | EXTRA_REFERRERThis extra can be used with any Intent used to launch an activity, supplying information
about who is launching that activity. This field contains a {@link android.net.Uri}
object, typically an http: or https: URI of the web site that the referral came from;
it can also use the {@link #URI_ANDROID_APP_SCHEME android-app:} scheme to identify
a native application that it came from.
To retrieve this value in a client, use {@link android.app.Activity#getReferrer}
instead of directly retrieving the extra. It is also valid for applications to
instead supply {@link #EXTRA_REFERRER_NAME} for cases where they can only create
a string, not a Uri; the field here, if supplied, will always take precedence,
however. | public static final String | EXTRA_REFERRER_NAMEAlternate version of {@link #EXTRA_REFERRER} that supplies the URI as a String rather
than a {@link android.net.Uri} object. Only for use in cases where Uri objects can
not be created, in particular when Intent extras are supplied through the
{@link #URI_INTENT_SCHEME intent:} or {@link #URI_ANDROID_APP_SCHEME android-app:}
schemes. | public static final String | EXTRA_ORIGINATING_UIDUsed as an int extra field with {@link #ACTION_INSTALL_PACKAGE} and
{@link} #ACTION_VIEW} to indicate the uid of the package that initiated the install | public static final String | EXTRA_ALLOW_REPLACEUsed as a boolean extra field with {@link #ACTION_INSTALL_PACKAGE} to install a
package. Tells the installer UI to skip the confirmation with the user
if the .apk is replacing an existing one. | public static final String | EXTRA_RETURN_RESULTUsed as a boolean extra field with {@link #ACTION_INSTALL_PACKAGE} or
{@link #ACTION_UNINSTALL_PACKAGE}. Specifies that the installer UI should
return to the application the result code of the install/uninstall. The returned result
code will be {@link android.app.Activity#RESULT_OK} on success or
{@link android.app.Activity#RESULT_FIRST_USER} on failure. | public static final String | EXTRA_INSTALL_RESULTPackage manager install result code. @hide because result codes are not
yet ready to be exposed. | public static final String | ACTION_UNINSTALL_PACKAGEActivity Action: Launch application uninstaller.
Input: The data must be a package: URI whose scheme specific part is
the package name of the current installed package to be uninstalled.
You can optionally supply {@link #EXTRA_RETURN_RESULT}.
Output: If {@link #EXTRA_RETURN_RESULT}, returns whether the install
succeeded. | public static final String | EXTRA_UNINSTALL_ALL_USERSSpecify whether the package should be uninstalled for all users. | public static final String | METADATA_SETUP_VERSIONA string associated with a {@link #ACTION_UPGRADE_SETUP} activity
describing the last run version of the platform that was setup. | public static final String | ACTION_SCREEN_OFFBroadcast Action: Sent when the device goes to sleep and becomes non-interactive.
For historical reasons, the name of this broadcast action refers to the power
state of the screen but it is actually sent in response to changes in the
overall interactive state of the device.
This broadcast is sent when the device becomes non-interactive which may have
nothing to do with the screen turning off. To determine the
actual state of the screen, use {@link android.view.Display#getState}.
See {@link android.os.PowerManager#isInteractive} for details.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_SCREEN_ONBroadcast Action: Sent when the device wakes up and becomes interactive.
For historical reasons, the name of this broadcast action refers to the power
state of the screen but it is actually sent in response to changes in the
overall interactive state of the device.
This broadcast is sent when the device becomes interactive which may have
nothing to do with the screen turning on. To determine the
actual state of the screen, use {@link android.view.Display#getState}.
See {@link android.os.PowerManager#isInteractive} for details.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_DREAMING_STOPPEDBroadcast Action: Sent after the system stops dreaming.
This is a protected intent that can only be sent by the system.
It is only sent to registered receivers. | public static final String | ACTION_DREAMING_STARTEDBroadcast Action: Sent after the system starts dreaming.
This is a protected intent that can only be sent by the system.
It is only sent to registered receivers. | public static final String | ACTION_USER_PRESENTBroadcast Action: Sent when the user is present after device wakes up (e.g when the
keyguard is gone).
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_TIME_TICKBroadcast Action: The current time has changed. Sent every
minute. You can not receive this through components declared
in manifests, only by explicitly registering for it with
{@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
Context.registerReceiver()}.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_TIME_CHANGEDBroadcast Action: The time was set. | public static final String | ACTION_DATE_CHANGEDBroadcast Action: The date has changed. | public static final String | ACTION_TIMEZONE_CHANGEDBroadcast Action: The timezone has changed. The intent will have the following extra values:
- time-zone - The java.util.TimeZone.getID() value identifying the new time zone.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_CLEAR_DNS_CACHEClear DNS Cache Action: This is broadcast when networks have changed and old
DNS entries should be tossed. | public static final String | ACTION_ALARM_CHANGEDAlarm Changed Action: This is broadcast when the AlarmClock
application's alarm is set or unset. It is used by the
AlarmClock application and the StatusBar service. | public static final String | ACTION_SYNC_STATE_CHANGEDSync State Changed Action: This is broadcast when the sync starts or stops or when one has
been failing for a long time. It is used by the SyncManager and the StatusBar service. | public static final String | ACTION_BOOT_COMPLETEDBroadcast Action: This is broadcast once, after the system has finished
booting. It can be used to perform application-specific initialization,
such as installing alarms. You must hold the
{@link android.Manifest.permission#RECEIVE_BOOT_COMPLETED} permission
in order to receive this broadcast.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_CLOSE_SYSTEM_DIALOGSBroadcast Action: This is broadcast when a user action should request a
temporary system dialog to dismiss. Some examples of temporary system
dialogs are the notification window-shade and the recent tasks dialog. | public static final String | ACTION_PACKAGE_INSTALLBroadcast Action: Trigger the download and eventual installation
of a package.
Input: {@link #getData} is the URI of the package file to download.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PACKAGE_ADDEDBroadcast Action: A new application package has been installed on the
device. The data contains the name of the package. Note that the
newly installed package does not receive this broadcast.
May include the following extras:
- {@link #EXTRA_UID} containing the integer uid assigned to the new package.
- {@link #EXTRA_REPLACING} is set to true if this is following
an {@link #ACTION_PACKAGE_REMOVED} broadcast for the same package.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PACKAGE_REPLACEDBroadcast Action: A new version of an application package has been
installed, replacing an existing version that was previously installed.
The data contains the name of the package.
May include the following extras:
- {@link #EXTRA_UID} containing the integer uid assigned to the new package.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_MY_PACKAGE_REPLACEDBroadcast Action: A new version of your application has been installed
over an existing one. This is only sent to the application that was
replaced. It does not contain any additional data; to receive it, just
use an intent filter for this action.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PACKAGE_REMOVEDBroadcast Action: An existing application package has been removed from
the device. The data contains the name of the package. The package
that is being installed does not receive this Intent.
- {@link #EXTRA_UID} containing the integer uid previously assigned
to the package.
- {@link #EXTRA_DATA_REMOVED} is set to true if the entire
application -- data and code -- is being removed.
- {@link #EXTRA_REPLACING} is set to true if this will be followed
by an {@link #ACTION_PACKAGE_ADDED} broadcast for the same package.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PACKAGE_FULLY_REMOVEDBroadcast Action: An existing application package has been completely
removed from the device. The data contains the name of the package.
This is like {@link #ACTION_PACKAGE_REMOVED}, but only set when
{@link #EXTRA_DATA_REMOVED} is true and
{@link #EXTRA_REPLACING} is false of that broadcast.
- {@link #EXTRA_UID} containing the integer uid previously assigned
to the package.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PACKAGE_CHANGEDBroadcast Action: An existing application package has been changed (e.g.
a component has been enabled or disabled). The data contains the name of
the package.
- {@link #EXTRA_UID} containing the integer uid assigned to the package.
- {@link #EXTRA_CHANGED_COMPONENT_NAME_LIST} containing the class name
of the changed components (or the package name itself).
- {@link #EXTRA_DONT_KILL_APP} containing boolean field to override the
default action of restarting the application.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_QUERY_PACKAGE_RESTART | public static final String | ACTION_PACKAGE_RESTARTEDBroadcast Action: The user has restarted a package, and all of its
processes have been killed. All runtime state
associated with it (processes, alarms, notifications, etc) should
be removed. Note that the restarted package does not
receive this broadcast.
The data contains the name of the package.
- {@link #EXTRA_UID} containing the integer uid assigned to the package.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PACKAGE_DATA_CLEAREDBroadcast Action: The user has cleared the data of a package. This should
be preceded by {@link #ACTION_PACKAGE_RESTARTED}, after which all of
its persistent data is erased and this broadcast sent.
Note that the cleared package does not
receive this broadcast. The data contains the name of the package.
- {@link #EXTRA_UID} containing the integer uid assigned to the package.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_UID_REMOVEDBroadcast Action: A user ID has been removed from the system. The user
ID number is stored in the extra data under {@link #EXTRA_UID}.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PACKAGE_FIRST_LAUNCHBroadcast Action: Sent to the installer package of an application
when that application is first launched (that is the first time it
is moved out of the stopped state). The data contains the name of the package.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PACKAGE_NEEDS_VERIFICATIONBroadcast Action: Sent to the system package verifier when a package
needs to be verified. The data contains the package URI.
This is a protected intent that can only be sent by the system.
| public static final String | ACTION_PACKAGE_VERIFIEDBroadcast Action: Sent to the system package verifier when a package is
verified. The data contains the package URI.
This is a protected intent that can only be sent by the system. | public static final String | ACTION_EXTERNAL_APPLICATIONS_AVAILABLEBroadcast Action: Resources for a set of packages (which were
previously unavailable) are currently
available since the media on which they exist is available.
The extra data {@link #EXTRA_CHANGED_PACKAGE_LIST} contains a
list of packages whose availability changed.
The extra data {@link #EXTRA_CHANGED_UID_LIST} contains a
list of uids of packages whose availability changed.
Note that the
packages in this list do not receive this broadcast.
The specified set of packages are now available on the system.
Includes the following extras:
- {@link #EXTRA_CHANGED_PACKAGE_LIST} is the set of packages
whose resources(were previously unavailable) are currently available.
{@link #EXTRA_CHANGED_UID_LIST} is the set of uids of the
packages whose resources(were previously unavailable)
are currently available.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLEBroadcast Action: Resources for a set of packages are currently
unavailable since the media on which they exist is unavailable.
The extra data {@link #EXTRA_CHANGED_PACKAGE_LIST} contains a
list of packages whose availability changed.
The extra data {@link #EXTRA_CHANGED_UID_LIST} contains a
list of uids of packages whose availability changed.
The specified set of packages can no longer be
launched and are practically unavailable on the system.
Inclues the following extras:
- {@link #EXTRA_CHANGED_PACKAGE_LIST} is the set of packages
whose resources are no longer available.
{@link #EXTRA_CHANGED_UID_LIST} is the set of packages
whose resources are no longer available.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_WALLPAPER_CHANGEDBroadcast Action: The current system wallpaper has changed. See
{@link android.app.WallpaperManager} for retrieving the new wallpaper.
This should only be used to determine when the wallpaper
has changed to show the new wallpaper to the user. You should certainly
never, in response to this, change the wallpaper or other attributes of
it such as the suggested size. That would be crazy, right? You'd cause
all kinds of loops, especially if other apps are doing similar things,
right? Of course. So please don't do this. | public static final String | ACTION_CONFIGURATION_CHANGEDBroadcast Action: The current device {@link android.content.res.Configuration}
(orientation, locale, etc) has changed. When such a change happens, the
UIs (view hierarchy) will need to be rebuilt based on this new
information; for the most part, applications don't need to worry about
this, because the system will take care of stopping and restarting the
application to make sure it sees the new changes. Some system code that
can not be restarted will need to watch for this action and handle it
appropriately.
You can not receive this through components declared
in manifests, only by explicitly registering for it with
{@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
Context.registerReceiver()}.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_LOCALE_CHANGEDBroadcast Action: The current device's locale has changed.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_BATTERY_CHANGEDBroadcast Action: This is a sticky broadcast containing the
charging state, level, and other information about the battery.
See {@link android.os.BatteryManager} for documentation on the
contents of the Intent.
You can not receive this through components declared
in manifests, only by explicitly registering for it with
{@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
Context.registerReceiver()}. See {@link #ACTION_BATTERY_LOW},
{@link #ACTION_BATTERY_OKAY}, {@link #ACTION_POWER_CONNECTED},
and {@link #ACTION_POWER_DISCONNECTED} for distinct battery-related
broadcasts that are sent and can be received through manifest
receivers.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_BATTERY_LOWBroadcast Action: Indicates low battery condition on the device.
This broadcast corresponds to the "Low battery warning" system dialog.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_BATTERY_OKAYBroadcast Action: Indicates the battery is now okay after being low.
This will be sent after {@link #ACTION_BATTERY_LOW} once the battery has
gone back up to an okay state.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_POWER_CONNECTEDBroadcast Action: External power has been connected to the device.
This is intended for applications that wish to register specifically to this notification.
Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to
stay active to receive this notification. This action can be used to implement actions
that wait until power is available to trigger.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_POWER_DISCONNECTEDBroadcast Action: External power has been removed from the device.
This is intended for applications that wish to register specifically to this notification.
Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to
stay active to receive this notification. This action can be used to implement actions
that wait until power is available to trigger.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_SHUTDOWNBroadcast Action: Device is shutting down.
This is broadcast when the device is being shut down (completely turned
off, not sleeping). Once the broadcast is complete, the final shutdown
will proceed and all unsaved data lost. Apps will not normally need
to handle this, since the foreground activity will be paused as well.
This is a protected intent that can only be sent
by the system.
May include the following extras:
- {@link #EXTRA_SHUTDOWN_USERSPACE_ONLY} a boolean that is set to true if this
shutdown is only for userspace processes. If not set, assumed to be false.
| public static final String | ACTION_REQUEST_SHUTDOWNActivity Action: Start this activity to request system shutdown.
The optional boolean extra field {@link #EXTRA_KEY_CONFIRM} can be set to true
to request confirmation from the user before shutting down.
This is a protected intent that can only be sent
by the system.
{@hide} | public static final String | ACTION_DEVICE_STORAGE_LOWBroadcast Action: A sticky broadcast that indicates low memory
condition on the device
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_DEVICE_STORAGE_OKBroadcast Action: Indicates low memory condition on the device no longer exists
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_DEVICE_STORAGE_FULLBroadcast Action: A sticky broadcast that indicates a memory full
condition on the device. This is intended for activities that want
to be able to fill the data partition completely, leaving only
enough free space to prevent system-wide SQLite failures.
This is a protected intent that can only be sent
by the system.
{@hide} | public static final String | ACTION_DEVICE_STORAGE_NOT_FULLBroadcast Action: Indicates memory full condition on the device
no longer exists.
This is a protected intent that can only be sent
by the system.
{@hide} | public static final String | ACTION_MANAGE_PACKAGE_STORAGEBroadcast Action: Indicates low memory condition notification acknowledged by user
and package management should be started.
This is triggered by the user from the ACTION_DEVICE_STORAGE_LOW
notification. | public static final String | ACTION_UMS_CONNECTEDBroadcast Action: The device has entered USB Mass Storage mode.
This is used mainly for the USB Settings panel.
Apps should listen for ACTION_MEDIA_MOUNTED and ACTION_MEDIA_UNMOUNTED broadcasts to be notified
when the SD card file system is mounted or unmounted | public static final String | ACTION_UMS_DISCONNECTEDBroadcast Action: The device has exited USB Mass Storage mode.
This is used mainly for the USB Settings panel.
Apps should listen for ACTION_MEDIA_MOUNTED and ACTION_MEDIA_UNMOUNTED broadcasts to be notified
when the SD card file system is mounted or unmounted | public static final String | ACTION_MEDIA_REMOVEDBroadcast Action: External media has been removed.
The path to the mount point for the removed media is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_UNMOUNTEDBroadcast Action: External media is present, but not mounted at its mount point.
The path to the mount point for the unmounted media is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_CHECKINGBroadcast Action: External media is present, and being disk-checked
The path to the mount point for the checking media is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_NOFSBroadcast Action: External media is present, but is using an incompatible fs (or is blank)
The path to the mount point for the checking media is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_MOUNTEDBroadcast Action: External media is present and mounted at its mount point.
The path to the mount point for the mounted media is contained in the Intent.mData field.
The Intent contains an extra with name "read-only" and Boolean value to indicate if the
media was mounted read only. | public static final String | ACTION_MEDIA_SHAREDBroadcast Action: External media is unmounted because it is being shared via USB mass storage.
The path to the mount point for the shared media is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_UNSHAREDBroadcast Action: External media is no longer being shared via USB mass storage.
The path to the mount point for the previously shared media is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_BAD_REMOVALBroadcast Action: External media was removed from SD card slot, but mount point was not unmounted.
The path to the mount point for the removed media is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_UNMOUNTABLEBroadcast Action: External media is present but cannot be mounted.
The path to the mount point for the unmountable media is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_EJECTBroadcast Action: User has expressed the desire to remove the external storage media.
Applications should close all files they have open within the mount point when they receive this intent.
The path to the mount point for the media to be ejected is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_SCANNER_STARTEDBroadcast Action: The media scanner has started scanning a directory.
The path to the directory being scanned is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_SCANNER_FINISHEDBroadcast Action: The media scanner has finished scanning a directory.
The path to the scanned directory is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_SCANNER_SCAN_FILEBroadcast Action: Request the media scanner to scan a file and add it to the media database.
The path to the file is contained in the Intent.mData field. | public static final String | ACTION_MEDIA_BUTTONBroadcast Action: The "Media Button" was pressed. Includes a single
extra field, {@link #EXTRA_KEY_EVENT}, containing the key event that
caused the broadcast. | public static final String | ACTION_CAMERA_BUTTONBroadcast Action: The "Camera Button" was pressed. Includes a single
extra field, {@link #EXTRA_KEY_EVENT}, containing the key event that
caused the broadcast. | public static final String | ACTION_GTALK_SERVICE_CONNECTEDBroadcast Action: A GTalk connection has been established. | public static final String | ACTION_GTALK_SERVICE_DISCONNECTEDBroadcast Action: A GTalk connection has been disconnected. | public static final String | ACTION_INPUT_METHOD_CHANGEDBroadcast Action: An input method has been changed. | public static final String | ACTION_AIRPLANE_MODE_CHANGED Broadcast Action: The user has switched the phone into or out of Airplane Mode. One or
more radios have been turned off or on. The intent will have the following extra value:
- state - A boolean value indicating whether Airplane Mode is on. If true,
then cell radio and possibly other radios such as bluetooth or WiFi may have also been
turned off
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_PROVIDER_CHANGEDBroadcast Action: Some content providers have parts of their namespace
where they publish new events or items that the user may be especially
interested in. For these things, they may broadcast this action when the
set of interesting items change.
For example, GmailProvider sends this notification when the set of unread
mail in the inbox changes.
The data of the intent identifies which part of which provider
changed. When queried through the content resolver, the data URI will
return the data set in question.
The intent will have the following extra values:
- count - The number of items in the data set. This is the
same as the number of items in the cursor returned by querying the
data URI.
This intent will be sent at boot (if the count is non-zero) and when the
data set changes. It is possible for the data set to change without the
count changing (for example, if a new unread message arrives in the same
sync operation in which a message is archived). The phone should still
ring/vibrate/etc as normal in this case. | public static final String | ACTION_HEADSET_PLUGBroadcast Action: Wired Headset plugged in or unplugged.
Same as {@link android.media.AudioManager#ACTION_HEADSET_PLUG}, to be consulted for value
and documentation.
If the minimum SDK version of your application is
{@link android.os.Build.VERSION_CODES#LOLLIPOP}, it is recommended to refer
to the AudioManager constant in your receiver registration code instead. | public static final String | ACTION_ADVANCED_SETTINGS_CHANGED Broadcast Action: The user has switched on advanced settings in the settings app:
- state - A boolean value indicating whether the settings is on or off.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_APPLICATION_RESTRICTIONS_CHANGEDBroadcast Action: Sent after application restrictions are changed.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_NEW_OUTGOING_CALLBroadcast Action: An outgoing call is about to be placed.
The Intent will have the following extra value:
- {@link android.content.Intent#EXTRA_PHONE_NUMBER} -
the phone number originally intended to be dialed.
Once the broadcast is finished, the resultData is used as the actual
number to call. If null , no call will be placed.
It is perfectly acceptable for multiple receivers to process the
outgoing call in turn: for example, a parental control application
might verify that the user is authorized to place the call at that
time, then a number-rewriting application might add an area code if
one was not specified.
For consistency, any receiver whose purpose is to prohibit phone
calls should have a priority of 0, to ensure it will see the final
phone number to be dialed.
Any receiver whose purpose is to rewrite phone numbers to be called
should have a positive priority.
Negative priorities are reserved for the system for this broadcast;
using them may cause problems.
Any BroadcastReceiver receiving this Intent must not
abort the broadcast.
Emergency calls cannot be intercepted using this mechanism, and
other calls cannot be modified to call emergency numbers using this
mechanism.
Some apps (such as VoIP apps) may want to redirect the outgoing
call to use their own service instead. Those apps should first prevent
the call from being placed by setting resultData to null
and then start their own app to make the call.
You must hold the
{@link android.Manifest.permission#PROCESS_OUTGOING_CALLS}
permission to receive this Intent.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_REBOOTBroadcast Action: Have the device reboot. This is only for use by
system code.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_DOCK_EVENTBroadcast Action: A sticky broadcast for changes in the physical
docking state of the device.
The intent will have the following extra values:
- {@link #EXTRA_DOCK_STATE} - the current dock
state, indicating which dock the device is physically in.
This is intended for monitoring the current physical dock state.
See {@link android.app.UiModeManager} for the normal API dealing with
dock mode changes. | public static final String | ACTION_IDLE_MAINTENANCE_STARTBroadcast Action: A broadcast when idle maintenance can be started.
This means that the user is not interacting with the device and is
not expected to do so soon. Typical use of the idle maintenance is
to perform somehow expensive tasks that can be postponed at a moment
when they will not degrade user experience.
In order to keep the device responsive in case of an
unexpected user interaction, implementations of a maintenance task
should be interruptible. In such a scenario a broadcast with action
{@link #ACTION_IDLE_MAINTENANCE_END} will be sent. In other words, you
should not do the maintenance work in
{@link BroadcastReceiver#onReceive(Context, Intent)}, rather start a
maintenance service by {@link Context#startService(Intent)}. Also
you should hold a wake lock while your maintenance service is running
to prevent the device going to sleep.
This is a protected intent that can only be sent by
the system.
| public static final String | ACTION_IDLE_MAINTENANCE_ENDBroadcast Action: A broadcast when idle maintenance should be stopped.
This means that the user was not interacting with the device as a result
of which a broadcast with action {@link #ACTION_IDLE_MAINTENANCE_START}
was sent and now the user started interacting with the device. Typical
use of the idle maintenance is to perform somehow expensive tasks that
can be postponed at a moment when they will not degrade user experience.
In order to keep the device responsive in case of an
unexpected user interaction, implementations of a maintenance task
should be interruptible. Hence, on receiving a broadcast with this
action, the maintenance task should be interrupted as soon as possible.
In other words, you should not do the maintenance work in
{@link BroadcastReceiver#onReceive(Context, Intent)}, rather stop the
maintenance service that was started on receiving of
{@link #ACTION_IDLE_MAINTENANCE_START}.Also you should release the wake
lock you acquired when your maintenance service started.
This is a protected intent that can only be sent
by the system. | public static final String | ACTION_REMOTE_INTENTBroadcast Action: a remote intent is to be broadcasted.
A remote intent is used for remote RPC between devices. The remote intent
is serialized and sent from one device to another device. The receiving
device parses the remote intent and broadcasts it. Note that anyone can
broadcast a remote intent. However, if the intent receiver of the remote intent
does not trust intent broadcasts from arbitrary intent senders, it should require
the sender to hold certain permissions so only trusted sender's broadcast will be
let through. | public static final String | ACTION_PRE_BOOT_COMPLETEDBroadcast Action: hook for permforming cleanup after a system update.
The broadcast is sent when the system is booting, before the
BOOT_COMPLETED broadcast. It is only sent to receivers in the system
image. A receiver for this should do its work and then disable itself
so that it does not get run again at the next boot. | public static final String | ACTION_GET_RESTRICTION_ENTRIESBroadcast to a specific application to query any supported restrictions to impose
on restricted users. The broadcast intent contains an extra
{@link #EXTRA_RESTRICTIONS_BUNDLE} with the currently persisted
restrictions as a Bundle of key/value pairs. The value types can be Boolean, String or
String[] depending on the restriction type.
The response should contain an extra {@link #EXTRA_RESTRICTIONS_LIST},
which is of type ArrayList<RestrictionEntry> . It can also
contain an extra {@link #EXTRA_RESTRICTIONS_INTENT}, which is of type Intent .
The activity specified by that intent will be launched for a result which must contain
one of the extras {@link #EXTRA_RESTRICTIONS_LIST} or {@link #EXTRA_RESTRICTIONS_BUNDLE}.
The keys and values of the returned restrictions will be persisted. | public static final String | ACTION_RESTRICTIONS_CHALLENGE | public static final String | ACTION_USER_INITIALIZESent the first time a user is starting, to allow system apps to
perform one time initialization. (This will not be seen by third
party applications because a newly initialized user does not have any
third party applications installed for it.) This is sent early in
starting the user, around the time the home app is started, before
{@link #ACTION_BOOT_COMPLETED} is sent. This is sent as a foreground
broadcast, since it is part of a visible user interaction; be as quick
as possible when handling it. | public static final String | ACTION_USER_FOREGROUNDSent when a user switch is happening, causing the process's user to be
brought to the foreground. This is only sent to receivers registered
through {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
Context.registerReceiver}. It is sent to the user that is going to the
foreground. This is sent as a foreground
broadcast, since it is part of a visible user interaction; be as quick
as possible when handling it. | public static final String | ACTION_USER_BACKGROUNDSent when a user switch is happening, causing the process's user to be
sent to the background. This is only sent to receivers registered
through {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
Context.registerReceiver}. It is sent to the user that is going to the
background. This is sent as a foreground
broadcast, since it is part of a visible user interaction; be as quick
as possible when handling it. | public static final String | ACTION_USER_ADDEDBroadcast sent to the system when a user is added. Carries an extra
EXTRA_USER_HANDLE that has the userHandle of the new user. It is sent to
all running users. You must hold
{@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast. | public static final String | ACTION_USER_STARTEDBroadcast sent by the system when a user is started. Carries an extra
EXTRA_USER_HANDLE that has the userHandle of the user. This is only sent to
registered receivers, not manifest receivers. It is sent to the user
that has been started. This is sent as a foreground
broadcast, since it is part of a visible user interaction; be as quick
as possible when handling it. | public static final String | ACTION_USER_STARTINGBroadcast sent when a user is in the process of starting. Carries an extra
EXTRA_USER_HANDLE that has the userHandle of the user. This is only
sent to registered receivers, not manifest receivers. It is sent to all
users (including the one that is being started). You must hold
{@link android.Manifest.permission#INTERACT_ACROSS_USERS} to receive
this broadcast. This is sent as a background broadcast, since
its result is not part of the primary UX flow; to safely keep track of
started/stopped state of a user you can use this in conjunction with
{@link #ACTION_USER_STOPPING}. It is not generally safe to use with
other user state broadcasts since those are foreground broadcasts so can
execute in a different order. | public static final String | ACTION_USER_STOPPINGBroadcast sent when a user is going to be stopped. Carries an extra
EXTRA_USER_HANDLE that has the userHandle of the user. This is only
sent to registered receivers, not manifest receivers. It is sent to all
users (including the one that is being stopped). You must hold
{@link android.Manifest.permission#INTERACT_ACROSS_USERS} to receive
this broadcast. The user will not stop until all receivers have
handled the broadcast. This is sent as a background broadcast, since
its result is not part of the primary UX flow; to safely keep track of
started/stopped state of a user you can use this in conjunction with
{@link #ACTION_USER_STARTING}. It is not generally safe to use with
other user state broadcasts since those are foreground broadcasts so can
execute in a different order. | public static final String | ACTION_USER_STOPPEDBroadcast sent to the system when a user is stopped. Carries an extra
EXTRA_USER_HANDLE that has the userHandle of the user. This is similar to
{@link #ACTION_PACKAGE_RESTARTED}, but for an entire user instead of a
specific package. This is only sent to registered receivers, not manifest
receivers. It is sent to all running users except the one that
has just been stopped (which is no longer running). | public static final String | ACTION_USER_REMOVEDBroadcast sent to the system when a user is removed. Carries an extra EXTRA_USER_HANDLE that has
the userHandle of the user. It is sent to all running users except the
one that has been removed. The user will not be completely removed until all receivers have
handled the broadcast. You must hold
{@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast. | public static final String | ACTION_USER_SWITCHEDBroadcast sent to the system when the user switches. Carries an extra EXTRA_USER_HANDLE that has
the userHandle of the user to become the current one. This is only sent to
registered receivers, not manifest receivers. It is sent to all running users.
You must hold
{@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast. | public static final String | ACTION_USER_INFO_CHANGEDBroadcast sent to the system when a user's information changes. Carries an extra
{@link #EXTRA_USER_HANDLE} to indicate which user's information changed.
This is only sent to registered receivers, not manifest receivers. It is sent to all users. | public static final String | ACTION_MANAGED_PROFILE_ADDEDBroadcast sent to the primary user when an associated managed profile is added (the profile
was created and is ready to be used). Carries an extra {@link #EXTRA_USER} that specifies
the UserHandle of the profile that was added. Only applications (for example Launchers)
that need to display merged content across both primary and managed profiles need to
worry about this broadcast. This is only sent to registered receivers,
not manifest receivers. | public static final String | ACTION_MANAGED_PROFILE_REMOVEDBroadcast sent to the primary user when an associated managed profile is removed. Carries an
extra {@link #EXTRA_USER} that specifies the UserHandle of the profile that was removed.
Only applications (for example Launchers) that need to display merged content across both
primary and managed profiles need to worry about this broadcast. This is only sent to
registered receivers, not manifest receivers. | public static final String | ACTION_QUICK_CLOCKSent when the user taps on the clock widget in the system's "quick settings" area. | public static final String | ACTION_SHOW_BRIGHTNESS_DIALOGActivity Action: Shows the brightness setting dialog. | public static final String | ACTION_GLOBAL_BUTTONBroadcast Action: A global button was pressed. Includes a single
extra field, {@link #EXTRA_KEY_EVENT}, containing the key event that
caused the broadcast. | public static final String | ACTION_OPEN_DOCUMENTActivity Action: Allow the user to select and return one or more existing
documents. When invoked, the system will display the various
{@link DocumentsProvider} instances installed on the device, letting the
user interactively navigate through them. These documents include local
media, such as photos and video, and documents provided by installed
cloud storage providers.
Each document is represented as a {@code content://} URI backed by a
{@link DocumentsProvider}, which can be opened as a stream with
{@link ContentResolver#openFileDescriptor(Uri, String)}, or queried for
{@link android.provider.DocumentsContract.Document} metadata.
All selected documents are returned to the calling application with
persistable read and write permission grants. If you want to maintain
access to the documents across device reboots, you need to explicitly
take the persistable permissions using
{@link ContentResolver#takePersistableUriPermission(Uri, int)}.
Callers must indicate the acceptable document MIME types through
{@link #setType(String)}. For example, to select photos, use
{@code image/*}. If multiple disjoint MIME types are acceptable, define
them in {@link #EXTRA_MIME_TYPES} and {@link #setType(String)} to
{@literal *}/*.
If the caller can handle multiple returned items (the user performing
multiple selection), then you can specify {@link #EXTRA_ALLOW_MULTIPLE}
to indicate this.
Callers must include {@link #CATEGORY_OPENABLE} in the Intent so that
returned URIs can be opened with
{@link ContentResolver#openFileDescriptor(Uri, String)}.
Output: The URI of the item that was picked, returned in
{@link #getData()}. This must be a {@code content://} URI so that any
receiver can access it. If multiple documents were selected, they are
returned in {@link #getClipData()}. | public static final String | ACTION_CREATE_DOCUMENTActivity Action: Allow the user to create a new document. When invoked,
the system will display the various {@link DocumentsProvider} instances
installed on the device, letting the user navigate through them. The
returned document may be a newly created document with no content, or it
may be an existing document with the requested MIME type.
Each document is represented as a {@code content://} URI backed by a
{@link DocumentsProvider}, which can be opened as a stream with
{@link ContentResolver#openFileDescriptor(Uri, String)}, or queried for
{@link android.provider.DocumentsContract.Document} metadata.
Callers must indicate the concrete MIME type of the document being
created by setting {@link #setType(String)}. This MIME type cannot be
changed after the document is created.
Callers can provide an initial display name through {@link #EXTRA_TITLE},
but the user may change this value before creating the file.
Callers must include {@link #CATEGORY_OPENABLE} in the Intent so that
returned URIs can be opened with
{@link ContentResolver#openFileDescriptor(Uri, String)}.
Output: The URI of the item that was created. This must be a
{@code content://} URI so that any receiver can access it. | public static final String | ACTION_OPEN_DOCUMENT_TREEActivity Action: Allow the user to pick a directory subtree. When
invoked, the system will display the various {@link DocumentsProvider}
instances installed on the device, letting the user navigate through
them. Apps can fully manage documents within the returned directory.
To gain access to descendant (child, grandchild, etc) documents, use
{@link DocumentsContract#buildDocumentUriUsingTree(Uri, String)} and
{@link DocumentsContract#buildChildDocumentsUriUsingTree(Uri, String)}
with the returned URI.
Output: The URI representing the selected directory tree. | public static final String | ACTION_MASTER_CLEAR{@hide} | public static final String | CATEGORY_DEFAULTSet if the activity should be an option for the default action
(center press) to perform on a piece of data. Setting this will
hide from the user any activities without it set when performing an
action on some data. Note that this is normally -not- set in the
Intent when initiating an action -- it is for use in intent filters
specified in packages. | public static final String | CATEGORY_BROWSABLEActivities that can be safely invoked from a browser must support this
category. For example, if the user is viewing a web page or an e-mail
and clicks on a link in the text, the Intent generated execute that
link will require the BROWSABLE category, so that only activities
supporting this category will be considered as possible actions. By
supporting this category, you are promising that there is nothing
damaging (without user intervention) that can happen by invoking any
matching Intent. | public static final String | CATEGORY_VOICE | public static final String | CATEGORY_ALTERNATIVESet if the activity should be considered as an alternative action to
the data the user is currently viewing. See also
{@link #CATEGORY_SELECTED_ALTERNATIVE} for an alternative action that
applies to the selection in a list of items.
Supporting this category means that you would like your activity to be
displayed in the set of alternative things the user can do, usually as
part of the current activity's options menu. You will usually want to
include a specific label in the <intent-filter> of this action
describing to the user what it does.
The action of IntentFilter with this category is important in that it
describes the specific action the target will perform. This generally
should not be a generic action (such as {@link #ACTION_VIEW}, but rather
a specific name such as "com.android.camera.action.CROP. Only one
alternative of any particular action will be shown to the user, so using
a specific action like this makes sure that your alternative will be
displayed while also allowing other applications to provide their own
overrides of that particular action. | public static final String | CATEGORY_SELECTED_ALTERNATIVESet if the activity should be considered as an alternative selection
action to the data the user has currently selected. This is like
{@link #CATEGORY_ALTERNATIVE}, but is used in activities showing a list
of items from which the user can select, giving them alternatives to the
default action that will be performed on it. | public static final String | CATEGORY_TABIntended to be used as a tab inside of a containing TabActivity. | public static final String | CATEGORY_LAUNCHERShould be displayed in the top-level launcher. | public static final String | CATEGORY_LEANBACK_LAUNCHERIndicates an activity optimized for Leanback mode, and that should
be displayed in the Leanback launcher. | public static final String | CATEGORY_LEANBACK_SETTINGSIndicates a Leanback settings activity to be displayed in the Leanback launcher. | public static final String | CATEGORY_INFOProvides information about the package it is in; typically used if
a package does not contain a {@link #CATEGORY_LAUNCHER} to provide
a front-door to the user without having to be shown in the all apps list. | public static final String | CATEGORY_HOMEThis is the home activity, that is the first activity that is displayed
when the device boots. | public static final String | CATEGORY_PREFERENCEThis activity is a preference panel. | public static final String | CATEGORY_DEVELOPMENT_PREFERENCEThis activity is a development preference panel. | public static final String | CATEGORY_EMBEDCapable of running inside a parent activity container. | public static final String | CATEGORY_APP_MARKETThis activity allows the user to browse and download new applications. | public static final String | CATEGORY_MONKEYThis activity may be exercised by the monkey or other automated test tools. | public static final String | CATEGORY_TESTTo be used as a test (not part of the normal user experience). | public static final String | CATEGORY_UNIT_TESTTo be used as a unit test (run through the Test Harness). | public static final String | CATEGORY_SAMPLE_CODETo be used as a sample code example (not part of the normal user
experience). | public static final String | CATEGORY_OPENABLEUsed to indicate that an intent only wants URIs that can be opened with
{@link ContentResolver#openFileDescriptor(Uri, String)}. Openable URIs
must support at least the columns defined in {@link OpenableColumns} when
queried. | public static final String | CATEGORY_FRAMEWORK_INSTRUMENTATION_TESTTo be used as code under test for framework instrumentation tests. | public static final String | CATEGORY_CAR_DOCKAn activity to run when device is inserted into a car dock.
Used with {@link #ACTION_MAIN} to launch an activity. For more
information, see {@link android.app.UiModeManager}. | public static final String | CATEGORY_DESK_DOCKAn activity to run when device is inserted into a car dock.
Used with {@link #ACTION_MAIN} to launch an activity. For more
information, see {@link android.app.UiModeManager}. | public static final String | CATEGORY_LE_DESK_DOCKAn activity to run when device is inserted into a analog (low end) dock.
Used with {@link #ACTION_MAIN} to launch an activity. For more
information, see {@link android.app.UiModeManager}. | public static final String | CATEGORY_HE_DESK_DOCKAn activity to run when device is inserted into a digital (high end) dock.
Used with {@link #ACTION_MAIN} to launch an activity. For more
information, see {@link android.app.UiModeManager}. | public static final String | CATEGORY_CAR_MODEUsed to indicate that the activity can be used in a car environment. | public static final String | CATEGORY_APP_BROWSERUsed with {@link #ACTION_MAIN} to launch the browser application.
The activity should be able to browse the Internet.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | CATEGORY_APP_CALCULATORUsed with {@link #ACTION_MAIN} to launch the calculator application.
The activity should be able to perform standard arithmetic operations.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | CATEGORY_APP_CALENDARUsed with {@link #ACTION_MAIN} to launch the calendar application.
The activity should be able to view and manipulate calendar entries.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | CATEGORY_APP_CONTACTSUsed with {@link #ACTION_MAIN} to launch the contacts application.
The activity should be able to view and manipulate address book entries.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | CATEGORY_APP_EMAILUsed with {@link #ACTION_MAIN} to launch the email application.
The activity should be able to send and receive email.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | CATEGORY_APP_GALLERYUsed with {@link #ACTION_MAIN} to launch the gallery application.
The activity should be able to view and manipulate image and video files
stored on the device.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | CATEGORY_APP_MAPSUsed with {@link #ACTION_MAIN} to launch the maps application.
The activity should be able to show the user's current location and surroundings.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | CATEGORY_APP_MESSAGINGUsed with {@link #ACTION_MAIN} to launch the messaging application.
The activity should be able to send and receive text messages.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | CATEGORY_APP_MUSICUsed with {@link #ACTION_MAIN} to launch the music application.
The activity should be able to play, browse, or manipulate music files
stored on the device.
NOTE: This should not be used as the primary key of an Intent,
since it will not result in the app launching with the correct
action and category. Instead, use this with
{@link #makeMainSelectorActivity(String, String)} to generate a main
Intent with this category in the selector. | public static final String | EXTRA_TEMPLATEThe initial data to place in a newly created record. Use with
{@link #ACTION_INSERT}. The data here is a Map containing the same
fields as would be given to the underlying ContentProvider.insert()
call. | public static final String | EXTRA_TEXTA constant CharSequence that is associated with the Intent, used with
{@link #ACTION_SEND} to supply the literal data to be sent. Note that
this may be a styled CharSequence, so you must use
{@link Bundle#getCharSequence(String) Bundle.getCharSequence()} to
retrieve it. | public static final String | EXTRA_HTML_TEXTA constant String that is associated with the Intent, used with
{@link #ACTION_SEND} to supply an alternative to {@link #EXTRA_TEXT}
as HTML formatted text. Note that you must also supply
{@link #EXTRA_TEXT}. | public static final String | EXTRA_STREAMA content: URI holding a stream of data associated with the Intent,
used with {@link #ACTION_SEND} to supply the data being sent. | public static final String | EXTRA_EMAILA String[] holding e-mail addresses that should be delivered to. | public static final String | EXTRA_CCA String[] holding e-mail addresses that should be carbon copied. | public static final String | EXTRA_BCCA String[] holding e-mail addresses that should be blind carbon copied. | public static final String | EXTRA_SUBJECTA constant string holding the desired subject line of a message. | public static final String | EXTRA_INTENTAn Intent describing the choices you would like shown with
{@link #ACTION_PICK_ACTIVITY}. | public static final String | EXTRA_TITLEA CharSequence dialog title to provide to the user when used with a
{@link #ACTION_CHOOSER}. | public static final String | EXTRA_INITIAL_INTENTSA Parcelable[] of {@link Intent} or
{@link android.content.pm.LabeledIntent} objects as set with
{@link #putExtra(String, Parcelable[])} of additional activities to place
a the front of the list of choices, when shown to the user with a
{@link #ACTION_CHOOSER}. | public static final String | EXTRA_REPLACEMENT_EXTRASA Bundle forming a mapping of potential target package names to different extras Bundles
to add to the default intent extras in {@link #EXTRA_INTENT} when used with
{@link #ACTION_CHOOSER}. Each key should be a package name. The package need not
be currently installed on the device.
An application may choose to provide alternate extras for the case where a user
selects an activity from a predetermined set of target packages. If the activity
the user selects from the chooser belongs to a package with its package name as
a key in this bundle, the corresponding extras for that package will be merged with
the extras already present in the intent at {@link #EXTRA_INTENT}. If a replacement
extra has the same key as an extra already present in the intent it will overwrite
the extra from the intent.
Examples:
- An application may offer different {@link #EXTRA_TEXT} to an application
when sharing with it via {@link #ACTION_SEND}, augmenting a link with additional query
parameters for that target.
- An application may offer additional metadata for known targets of a given intent
to pass along information only relevant to that target such as account or content
identifiers already known to that application.
| public static final String | EXTRA_CHOSEN_COMPONENT_INTENT_SENDERAn {@link IntentSender} that will be notified if a user successfully chooses a target
component to handle an action in an {@link #ACTION_CHOOSER} activity. The IntentSender
will have the extra {@link #EXTRA_CHOSEN_COMPONENT} appended to it containing the
{@link ComponentName} of the chosen component.
In some situations this callback may never come, for example if the user abandons
the chooser, switches to another task or any number of other reasons. Apps should not
be written assuming that this callback will always occur. | public static final String | EXTRA_CHOSEN_COMPONENTThe {@link ComponentName} chosen by the user to complete an action. | public static final String | EXTRA_KEY_EVENTA {@link android.view.KeyEvent} object containing the event that
triggered the creation of the Intent it is in. | public static final String | EXTRA_KEY_CONFIRMSet to true in {@link #ACTION_REQUEST_SHUTDOWN} to request confirmation from the user
before shutting down.
{@hide} | public static final String | EXTRA_DONT_KILL_APPUsed as a boolean extra field in {@link android.content.Intent#ACTION_PACKAGE_REMOVED} or
{@link android.content.Intent#ACTION_PACKAGE_CHANGED} intents to override the default action
of restarting the application. | public static final String | EXTRA_PHONE_NUMBERA String holding the phone number originally entered in
{@link android.content.Intent#ACTION_NEW_OUTGOING_CALL}, or the actual
number to call in a {@link android.content.Intent#ACTION_CALL}. | public static final String | EXTRA_UIDUsed as an int extra field in {@link android.content.Intent#ACTION_UID_REMOVED}
intents to supply the uid the package had been assigned. Also an optional
extra in {@link android.content.Intent#ACTION_PACKAGE_REMOVED} or
{@link android.content.Intent#ACTION_PACKAGE_CHANGED} for the same
purpose. | public static final String | EXTRA_PACKAGES | public static final String | EXTRA_DATA_REMOVEDUsed as a boolean extra field in {@link android.content.Intent#ACTION_PACKAGE_REMOVED}
intents to indicate whether this represents a full uninstall (removing
both the code and its data) or a partial uninstall (leaving its data,
implying that this is an update). | public static final String | EXTRA_REMOVED_FOR_ALL_USERS | public static final String | EXTRA_REPLACINGUsed as a boolean extra field in {@link android.content.Intent#ACTION_PACKAGE_REMOVED}
intents to indicate that this is a replacement of the package, so this
broadcast will immediately be followed by an add broadcast for a
different version of the same package. | public static final String | EXTRA_ALARM_COUNTUsed as an int extra field in {@link android.app.AlarmManager} intents
to tell the application being invoked how many pending alarms are being
delievered with the intent. For one-shot alarms this will always be 1.
For recurring alarms, this might be greater than 1 if the device was
asleep or powered off at the time an earlier alarm would have been
delivered. | public static final String | EXTRA_DOCK_STATEUsed as an int extra field in {@link android.content.Intent#ACTION_DOCK_EVENT}
intents to request the dock state. Possible values are
{@link android.content.Intent#EXTRA_DOCK_STATE_UNDOCKED},
{@link android.content.Intent#EXTRA_DOCK_STATE_DESK}, or
{@link android.content.Intent#EXTRA_DOCK_STATE_CAR}, or
{@link android.content.Intent#EXTRA_DOCK_STATE_LE_DESK}, or
{@link android.content.Intent#EXTRA_DOCK_STATE_HE_DESK}. | public static final int | EXTRA_DOCK_STATE_UNDOCKEDUsed as an int value for {@link android.content.Intent#EXTRA_DOCK_STATE}
to represent that the phone is not in any dock. | public static final int | EXTRA_DOCK_STATE_DESKUsed as an int value for {@link android.content.Intent#EXTRA_DOCK_STATE}
to represent that the phone is in a desk dock. | public static final int | EXTRA_DOCK_STATE_CARUsed as an int value for {@link android.content.Intent#EXTRA_DOCK_STATE}
to represent that the phone is in a car dock. | public static final int | EXTRA_DOCK_STATE_LE_DESKUsed as an int value for {@link android.content.Intent#EXTRA_DOCK_STATE}
to represent that the phone is in a analog (low end) dock. | public static final int | EXTRA_DOCK_STATE_HE_DESKUsed as an int value for {@link android.content.Intent#EXTRA_DOCK_STATE}
to represent that the phone is in a digital (high end) dock. | public static final String | METADATA_DOCK_HOMEBoolean that can be supplied as meta-data with a dock activity, to
indicate that the dock should take over the home key when it is active. | public static final String | EXTRA_BUG_REPORTUsed as a parcelable extra field in {@link #ACTION_APP_ERROR}, containing
the bug report. | public static final String | EXTRA_REMOTE_INTENT_TOKENUsed in the extra field in the remote intent. It's astring token passed with the
remote intent. | public static final String | EXTRA_CHANGED_COMPONENT_NAME | public static final String | EXTRA_CHANGED_COMPONENT_NAME_LISTThis field is part of {@link android.content.Intent#ACTION_PACKAGE_CHANGED},
and contains a string array of all of the components that have changed. If
the state of the overall package has changed, then it will contain an entry
with the package name itself. | public static final String | EXTRA_CHANGED_PACKAGE_LISTThis field is part of
{@link android.content.Intent#ACTION_EXTERNAL_APPLICATIONS_AVAILABLE},
{@link android.content.Intent#ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE}
and contains a string array of all of the components that have changed. | public static final String | EXTRA_CHANGED_UID_LISTThis field is part of
{@link android.content.Intent#ACTION_EXTERNAL_APPLICATIONS_AVAILABLE},
{@link android.content.Intent#ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE}
and contains an integer array of uids of all of the components
that have changed. | public static final String | EXTRA_CLIENT_LABEL | public static final String | EXTRA_CLIENT_INTENT | public static final String | EXTRA_LOCAL_ONLYExtra used to indicate that an intent should only return data that is on
the local device. This is a boolean extra; the default is false. If true,
an implementation should only allow the user to select data that is
already on the device, not requiring it be downloaded from a remote
service when opened. | public static final String | EXTRA_ALLOW_MULTIPLEExtra used to indicate that an intent can allow the user to select and
return multiple items. This is a boolean extra; the default is false. If
true, an implementation is allowed to present the user with a UI where
they can pick multiple items that are all returned to the caller. When
this happens, they should be returned as the {@link #getClipData()} part
of the result Intent. | public static final String | EXTRA_USER_HANDLEThe integer userHandle carried with broadcast intents related to addition, removal and
switching of users and managed profiles - {@link #ACTION_USER_ADDED},
{@link #ACTION_USER_REMOVED} and {@link #ACTION_USER_SWITCHED}. | public static final String | EXTRA_USERThe UserHandle carried with broadcasts intents related to addition and removal of managed
profiles - {@link #ACTION_MANAGED_PROFILE_ADDED} and {@link #ACTION_MANAGED_PROFILE_REMOVED}. | public static final String | EXTRA_RESTRICTIONS_LISTExtra used in the response from a BroadcastReceiver that handles
{@link #ACTION_GET_RESTRICTION_ENTRIES}. The type of the extra is
ArrayList<RestrictionEntry> . | public static final String | EXTRA_RESTRICTIONS_BUNDLEExtra sent in the intent to the BroadcastReceiver that handles
{@link #ACTION_GET_RESTRICTION_ENTRIES}. The type of the extra is a Bundle containing
the restrictions as key/value pairs. | public static final String | EXTRA_RESTRICTIONS_INTENTExtra used in the response from a BroadcastReceiver that handles
{@link #ACTION_GET_RESTRICTION_ENTRIES}. | public static final String | EXTRA_MIME_TYPESExtra used to communicate a set of acceptable MIME types. The type of the
extra is {@code String[]}. Values may be a combination of concrete MIME
types (such as "image/png") and/or partial MIME types (such as
"audio/*"). | public static final String | EXTRA_SHUTDOWN_USERSPACE_ONLYOptional extra for {@link #ACTION_SHUTDOWN} that allows the sender to qualify that
this shutdown is only for the user space of the system, not a complete shutdown.
When this is true, hardware devices can use this information to determine that
they shouldn't do a complete shutdown of their device since this is not a
complete shutdown down to the kernel, but only user space restarting.
The default if not supplied is false. | public static final String | EXTRA_TIME_PREF_24_HOUR_FORMATOptional boolean extra for {@link #ACTION_TIME_CHANGED} that indicates the
user has set their time format preferences to the 24 hour format. | public static final String | EXTRA_REASON{@hide} | public static final int | FLAG_GRANT_READ_URI_PERMISSIONIf set, the recipient of this Intent will be granted permission to
perform read operations on the URI in the Intent's data and any URIs
specified in its ClipData. When applying to an Intent's ClipData,
all URIs as well as recursive traversals through data or other ClipData
in Intent items will be granted; only the grant flags of the top-level
Intent are used. | public static final int | FLAG_GRANT_WRITE_URI_PERMISSIONIf set, the recipient of this Intent will be granted permission to
perform write operations on the URI in the Intent's data and any URIs
specified in its ClipData. When applying to an Intent's ClipData,
all URIs as well as recursive traversals through data or other ClipData
in Intent items will be granted; only the grant flags of the top-level
Intent are used. | public static final int | FLAG_FROM_BACKGROUNDCan be set by the caller to indicate that this Intent is coming from
a background operation, not from direct user interaction. | public static final int | FLAG_DEBUG_LOG_RESOLUTIONA flag you can enable for debugging: when set, log messages will be
printed during the resolution of this intent to show you what has
been found to create the final resolved list. | public static final int | FLAG_EXCLUDE_STOPPED_PACKAGESIf set, this intent will not match any components in packages that
are currently stopped. If this is not set, then the default behavior
is to include such applications in the result. | public static final int | FLAG_INCLUDE_STOPPED_PACKAGESIf set, this intent will always match any components in packages that
are currently stopped. This is the default behavior when
{@link #FLAG_EXCLUDE_STOPPED_PACKAGES} is not set. If both of these
flags are set, this one wins (it allows overriding of exclude for
places where the framework may automatically set the exclude flag). | public static final int | FLAG_GRANT_PERSISTABLE_URI_PERMISSIONWhen combined with {@link #FLAG_GRANT_READ_URI_PERMISSION} and/or
{@link #FLAG_GRANT_WRITE_URI_PERMISSION}, the URI permission grant can be
persisted across device reboots until explicitly revoked with
{@link Context#revokeUriPermission(Uri, int)}. This flag only offers the
grant for possible persisting; the receiving application must call
{@link ContentResolver#takePersistableUriPermission(Uri, int)} to
actually persist. | public static final int | FLAG_GRANT_PREFIX_URI_PERMISSIONWhen combined with {@link #FLAG_GRANT_READ_URI_PERMISSION} and/or
{@link #FLAG_GRANT_WRITE_URI_PERMISSION}, the URI permission grant
applies to any URI that is a prefix match against the original granted
URI. (Without this flag, the URI must match exactly for access to be
granted.) Another URI is considered a prefix match only when scheme,
authority, and all path segments defined by the prefix are an exact
match. | public static final int | FLAG_ACTIVITY_NO_HISTORYIf set, the new activity is not kept in the history stack. As soon as
the user navigates away from it, the activity is finished. This may also
be set with the {@link android.R.styleable#AndroidManifestActivity_noHistory
noHistory} attribute.
If set, {@link android.app.Activity#onActivityResult onActivityResult()}
is never invoked when the current activity starts a new activity which
sets a result and finishes. | public static final int | FLAG_ACTIVITY_SINGLE_TOPIf set, the activity will not be launched if it is already running
at the top of the history stack. | public static final int | FLAG_ACTIVITY_NEW_TASKIf set, this activity will become the start of a new task on this
history stack. A task (from the activity that started it to the
next task activity) defines an atomic group of activities that the
user can move to. Tasks can be moved to the foreground and background;
all of the activities inside of a particular task always remain in
the same order. See
Tasks and Back
Stack for more information about tasks.
This flag is generally used by activities that want
to present a "launcher" style behavior: they give the user a list of
separate things that can be done, which otherwise run completely
independently of the activity launching them.
When using this flag, if a task is already running for the activity
you are now starting, then a new activity will not be started; instead,
the current task will simply be brought to the front of the screen with
the state it was last in. See {@link #FLAG_ACTIVITY_MULTIPLE_TASK} for a flag
to disable this behavior.
This flag can not be used when the caller is requesting a result from
the activity being launched. | public static final int | FLAG_ACTIVITY_MULTIPLE_TASKThis flag is used to create a new task and launch an activity into it.
This flag is always paired with either {@link #FLAG_ACTIVITY_NEW_DOCUMENT}
or {@link #FLAG_ACTIVITY_NEW_TASK}. In both cases these flags alone would
search through existing tasks for ones matching this Intent. Only if no such
task is found would a new task be created. When paired with
FLAG_ACTIVITY_MULTIPLE_TASK both of these behaviors are modified to skip
the search for a matching task and unconditionally start a new task.
When used with {@link #FLAG_ACTIVITY_NEW_TASK} do not use this
flag unless you are implementing your own
top-level application launcher. Used in conjunction with
{@link #FLAG_ACTIVITY_NEW_TASK} to disable the
behavior of bringing an existing task to the foreground. When set,
a new task is always started to host the Activity for the
Intent, regardless of whether there is already an existing task running
the same thing.
Because the default system does not include graphical task management,
you should not use this flag unless you provide some way for a user to
return back to the tasks you have launched.
See {@link #FLAG_ACTIVITY_NEW_DOCUMENT} for details of this flag's use for
creating new document tasks.
This flag is ignored if one of {@link #FLAG_ACTIVITY_NEW_TASK} or
{@link #FLAG_ACTIVITY_NEW_DOCUMENT} is not also set.
See
Tasks and Back
Stack for more information about tasks. | public static final int | FLAG_ACTIVITY_CLEAR_TOPIf set, and the activity being launched is already running in the
current task, then instead of launching a new instance of that activity,
all of the other activities on top of it will be closed and this Intent
will be delivered to the (now on top) old activity as a new Intent.
For example, consider a task consisting of the activities: A, B, C, D.
If D calls startActivity() with an Intent that resolves to the component
of activity B, then C and D will be finished and B receive the given
Intent, resulting in the stack now being: A, B.
The currently running instance of activity B in the above example will
either receive the new intent you are starting here in its
onNewIntent() method, or be itself finished and restarted with the
new intent. If it has declared its launch mode to be "multiple" (the
default) and you have not set {@link #FLAG_ACTIVITY_SINGLE_TOP} in
the same intent, then it will be finished and re-created; for all other
launch modes or if {@link #FLAG_ACTIVITY_SINGLE_TOP} is set then this
Intent will be delivered to the current instance's onNewIntent().
This launch mode can also be used to good effect in conjunction with
{@link #FLAG_ACTIVITY_NEW_TASK}: if used to start the root activity
of a task, it will bring any currently running instance of that task
to the foreground, and then clear it to its root state. This is
especially useful, for example, when launching an activity from the
notification manager.
See
Tasks and Back
Stack for more information about tasks. | public static final int | FLAG_ACTIVITY_FORWARD_RESULTIf set and this intent is being used to launch a new activity from an
existing one, then the reply target of the existing activity will be
transfered to the new activity. This way the new activity can call
{@link android.app.Activity#setResult} and have that result sent back to
the reply target of the original activity. | public static final int | FLAG_ACTIVITY_PREVIOUS_IS_TOPIf set and this intent is being used to launch a new activity from an
existing one, the current activity will not be counted as the top
activity for deciding whether the new intent should be delivered to
the top instead of starting a new one. The previous activity will
be used as the top, with the assumption being that the current activity
will finish itself immediately. | public static final int | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTSIf set, the new activity is not kept in the list of recently launched
activities. | public static final int | FLAG_ACTIVITY_BROUGHT_TO_FRONTThis flag is not normally set by application code, but set for you by
the system as described in the
{@link android.R.styleable#AndroidManifestActivity_launchMode
launchMode} documentation for the singleTask mode. | public static final int | FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDIf set, and this activity is either being started in a new task or
bringing to the top an existing task, then it will be launched as
the front door of the task. This will result in the application of
any affinities needed to have that task in the proper state (either
moving activities to or from it), or simply resetting that task to
its initial state if needed. | public static final int | FLAG_ACTIVITY_LAUNCHED_FROM_HISTORYThis flag is not normally set by application code, but set for you by
the system if this activity is being launched from history
(longpress home key). | public static final int | FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | public static final int | FLAG_ACTIVITY_NEW_DOCUMENTThis flag is used to open a document into a new task rooted at the activity launched
by this Intent. Through the use of this flag, or its equivalent attribute,
{@link android.R.attr#documentLaunchMode} multiple instances of the same activity
containing different documents will appear in the recent tasks list.
The use of the activity attribute form of this,
{@link android.R.attr#documentLaunchMode}, is
preferred over the Intent flag described here. The attribute form allows the
Activity to specify multiple document behavior for all launchers of the Activity
whereas using this flag requires each Intent that launches the Activity to specify it.
Note that the default semantics of this flag w.r.t. whether the recents entry for
it is kept after the activity is finished is different than the use of
{@link #FLAG_ACTIVITY_NEW_TASK} and {@link android.R.attr#documentLaunchMode} -- if
this flag is being used to create a new recents entry, then by default that entry
will be removed once the activity is finished. You can modify this behavior with
{@link #FLAG_ACTIVITY_RETAIN_IN_RECENTS}.
FLAG_ACTIVITY_NEW_DOCUMENT may be used in conjunction with {@link
#FLAG_ACTIVITY_MULTIPLE_TASK}. When used alone it is the
equivalent of the Activity manifest specifying {@link
android.R.attr#documentLaunchMode}="intoExisting". When used with
FLAG_ACTIVITY_MULTIPLE_TASK it is the equivalent of the Activity manifest specifying
{@link android.R.attr#documentLaunchMode}="always".
Refer to {@link android.R.attr#documentLaunchMode} for more information. | public static final int | FLAG_ACTIVITY_NO_USER_ACTIONIf set, this flag will prevent the normal {@link android.app.Activity#onUserLeaveHint}
callback from occurring on the current frontmost activity before it is
paused as the newly-started activity is brought to the front.
Typically, an activity can rely on that callback to indicate that an
explicit user action has caused their activity to be moved out of the
foreground. The callback marks an appropriate point in the activity's
lifecycle for it to dismiss any notifications that it intends to display
"until the user has seen them," such as a blinking LED.
If an activity is ever started via any non-user-driven events such as
phone-call receipt or an alarm handler, this flag should be passed to {@link
Context#startActivity Context.startActivity}, ensuring that the pausing
activity does not think the user has acknowledged its notification. | public static final int | FLAG_ACTIVITY_REORDER_TO_FRONTIf set in an Intent passed to {@link Context#startActivity Context.startActivity()},
this flag will cause the launched activity to be brought to the front of its
task's history stack if it is already running.
For example, consider a task consisting of four activities: A, B, C, D.
If D calls startActivity() with an Intent that resolves to the component
of activity B, then B will be brought to the front of the history stack,
with this resulting order: A, C, D, B.
This flag will be ignored if {@link #FLAG_ACTIVITY_CLEAR_TOP} is also
specified. | public static final int | FLAG_ACTIVITY_NO_ANIMATIONIf set in an Intent passed to {@link Context#startActivity Context.startActivity()},
this flag will prevent the system from applying an activity transition
animation to go to the next activity state. This doesn't mean an
animation will never run -- if another activity change happens that doesn't
specify this flag before the activity started here is displayed, then
that transition will be used. This flag can be put to good use
when you are going to do a series of activity operations but the
animation seen by the user shouldn't be driven by the first activity
change but rather a later one. | public static final int | FLAG_ACTIVITY_CLEAR_TASKIf set in an Intent passed to {@link Context#startActivity Context.startActivity()},
this flag will cause any existing task that would be associated with the
activity to be cleared before the activity is started. That is, the activity
becomes the new root of an otherwise empty task, and any old activities
are finished. This can only be used in conjunction with {@link #FLAG_ACTIVITY_NEW_TASK}. | public static final int | FLAG_ACTIVITY_TASK_ON_HOMEIf set in an Intent passed to {@link Context#startActivity Context.startActivity()},
this flag will cause a newly launching task to be placed on top of the current
home activity task (if there is one). That is, pressing back from the task
will always return the user to home even if that was not the last activity they
saw. This can only be used in conjunction with {@link #FLAG_ACTIVITY_NEW_TASK}. | public static final int | FLAG_ACTIVITY_RETAIN_IN_RECENTSBy default a document created by {@link #FLAG_ACTIVITY_NEW_DOCUMENT} will
have its entry in recent tasks removed when the user closes it (with back
or however else it may finish()). If you would like to instead allow the
document to be kept in recents so that it can be re-launched, you can use
this flag. When set and the task's activity is finished, the recents
entry will remain in the interface for the user to re-launch it, like a
recents entry for a top-level application.
The receiving activity can override this request with
{@link android.R.attr#autoRemoveFromRecents} or by explcitly calling
{@link android.app.Activity#finishAndRemoveTask()
Activity.finishAndRemoveTask()}. | public static final int | FLAG_RECEIVER_REGISTERED_ONLYIf set, when sending a broadcast only registered receivers will be
called -- no BroadcastReceiver components will be launched. | public static final int | FLAG_RECEIVER_REPLACE_PENDINGIf set, when sending a broadcast the new broadcast will replace
any existing pending broadcast that matches it. Matching is defined
by {@link Intent#filterEquals(Intent) Intent.filterEquals} returning
true for the intents of the two broadcasts. When a match is found,
the new broadcast (and receivers associated with it) will replace the
existing one in the pending broadcast list, remaining at the same
position in the list.
This flag is most typically used with sticky broadcasts, which
only care about delivering the most recent values of the broadcast
to their receivers. | public static final int | FLAG_RECEIVER_FOREGROUNDIf set, when sending a broadcast the recipient is allowed to run at
foreground priority, with a shorter timeout interval. During normal
broadcasts the receivers are not automatically hoisted out of the
background priority class. | public static final int | FLAG_RECEIVER_NO_ABORTIf this is an ordered broadcast, don't allow receivers to abort the broadcast.
They can still propagate results through to later receivers, but they can not prevent
later receivers from seeing the broadcast. | public static final int | FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOTIf set, when sending a broadcast before boot has completed only
registered receivers will be called -- no BroadcastReceiver components
will be launched. Sticky intent state will be recorded properly even
if no receivers wind up being called. If {@link #FLAG_RECEIVER_REGISTERED_ONLY}
is specified in the broadcast intent, this flag is unnecessary.
This flag is only for use by system sevices as a convenience to
avoid having to implement a more complex mechanism around detection
of boot completion. | public static final int | FLAG_RECEIVER_BOOT_UPGRADESet when this broadcast is for a boot upgrade, a special mode that
allows the broadcast to be sent before the system is ready and launches
the app process with no providers running in it. | public static final int | IMMUTABLE_FLAGS | public static final int | URI_INTENT_SCHEMEFlag for use with {@link #toUri} and {@link #parseUri}: the URI string
always has the "intent:" scheme. This syntax can be used when you want
to later disambiguate between URIs that are intended to describe an
Intent vs. all others that should be treated as raw URIs. When used
with {@link #parseUri}, any other scheme will result in a generic
VIEW action for that raw URI. | public static final int | URI_ANDROID_APP_SCHEMEFlag for use with {@link #toUri} and {@link #parseUri}: the URI string
always has the "android-app:" scheme. This is a variation of
{@link #URI_INTENT_SCHEME} whose format is simpler for the case of an
http/https URI being delivered to a specific package name. The format
is:
android-app://{package_id}[/{scheme}[/{host}[/{path}]]][#Intent;{...}]
In this scheme, only the package_id is required. If you include a host,
you must also include a scheme; including a path also requires both a host and a scheme.
The final #Intent; fragment can be used without a scheme, host, or path.
Note that this can not be
used with intents that have a {@link #setSelector}, since the base intent
will always have an explicit package name.
Some examples of how this scheme maps to Intent objects:
URI | Intent |
android-app://com.example.app |
Action: | {@link #ACTION_MAIN} |
Package: | com.example.app |
|
android-app://com.example.app/http/example.com |
Action: | {@link #ACTION_VIEW} |
Data: | http://example.com/ |
Package: | com.example.app |
|
android-app://com.example.app/http/example.com/foo?1234 |
Action: | {@link #ACTION_VIEW} |
Data: | http://example.com/foo?1234 |
Package: | com.example.app |
|
android-app://com.example.app/ #Intent;action=com.example.MY_ACTION;end |
Action: | com.example.MY_ACTION |
Package: | com.example.app |
|
android-app://com.example.app/http/example.com/foo?1234 #Intent;action=com.example.MY_ACTION;end |
Action: | com.example.MY_ACTION |
Data: | http://example.com/foo?1234 |
Package: | com.example.app |
|
android-app://com.example.app/ #Intent;action=com.example.MY_ACTION; i.some_int=100;S.some_str=hello;end |
Action: | com.example.MY_ACTION |
Package: | com.example.app |
Extras: | some_int=(int)100 some_str=(String)hello |
|
| public static final int | URI_ALLOW_UNSAFEFlag for use with {@link #toUri} and {@link #parseUri}: allow parsing
of unsafe information. In particular, the flags {@link #FLAG_GRANT_READ_URI_PERMISSION},
{@link #FLAG_GRANT_WRITE_URI_PERMISSION}, {@link #FLAG_GRANT_PERSISTABLE_URI_PERMISSION},
and {@link #FLAG_GRANT_PREFIX_URI_PERMISSION} flags can not be set, so that the
generated Intent can not cause unexpected data access to happen.
If you do not trust the source of the URI being parsed, you should still do further
processing to protect yourself from it. In particular, when using it to start an
activity you should usually add in {@link #CATEGORY_BROWSABLE} to limit the activities
that can handle it. | private String | mAction | private android.net.Uri | mData | private String | mType | private String | mPackage | private ComponentName | mComponent | private int | mFlags | private android.util.ArraySet | mCategories | private android.os.Bundle | mExtras | private android.graphics.Rect | mSourceBounds | private Intent | mSelector | private ClipData | mClipData | private int | mContentUserHint | public static final int | FILL_IN_ACTIONUse with {@link #fillIn} to allow the current action value to be
overwritten, even if it is already set. | public static final int | FILL_IN_DATAUse with {@link #fillIn} to allow the current data or type value
overwritten, even if it is already set. | public static final int | FILL_IN_CATEGORIESUse with {@link #fillIn} to allow the current categories to be
overwritten, even if they are already set. | public static final int | FILL_IN_COMPONENTUse with {@link #fillIn} to allow the current component value to be
overwritten, even if it is already set. | public static final int | FILL_IN_PACKAGEUse with {@link #fillIn} to allow the current package value to be
overwritten, even if it is already set. | public static final int | FILL_IN_SOURCE_BOUNDSUse with {@link #fillIn} to allow the current bounds rectangle to be
overwritten, even if it is already set. | public static final int | FILL_IN_SELECTORUse with {@link #fillIn} to allow the current selector to be
overwritten, even if it is already set. | public static final int | FILL_IN_CLIP_DATAUse with {@link #fillIn} to allow the current ClipData to be
overwritten, even if it is already set. | public static final Parcelable.Creator | CREATOR |
Constructors Summary |
---|
public Intent(String action, android.net.Uri uri)Create an intent with a given action and for a given data url. Note
that the action must be in a namespace because Intents are
used globally in the system -- for example the system VIEW action is
android.intent.action.VIEW; an application's custom action would be
something like com.google.app.myapp.CUSTOM_ACTION.
Note: scheme and host name matching in the Android framework is
case-sensitive, unlike the formal RFC. As a result,
you should always ensure that you write your Uri with these elements
using lower case letters, and normalize any Uris you receive from
outside of Android to ensure the scheme and host is lower case.
setAction(action);
mData = uri;
| public Intent(Context packageContext, Class cls)Create an intent for a specific component. All other fields (action, data,
type, class) are null, though they can be modified later with explicit
calls. This provides a convenient way to create an intent that is
intended to execute a hard-coded class name, rather than relying on the
system to find an appropriate class for you; see {@link #setComponent}
for more information on the repercussions of this.
mComponent = new ComponentName(packageContext, cls);
| public Intent(String action, android.net.Uri uri, Context packageContext, Class cls)Create an intent for a specific component with a specified action and data.
This is equivalent to using {@link #Intent(String, android.net.Uri)} to
construct the Intent and then calling {@link #setClass} to set its
class.
Note: scheme and host name matching in the Android framework is
case-sensitive, unlike the formal RFC. As a result,
you should always ensure that you write your Uri with these elements
using lower case letters, and normalize any Uris you receive from
outside of Android to ensure the scheme and host is lower case.
setAction(action);
mData = uri;
mComponent = new ComponentName(packageContext, cls);
| protected Intent(android.os.Parcel in)
readFromParcel(in);
| public Intent()Create an empty intent.
// ---------------------------------------------------------------------
| public Intent(Intent o)Copy constructor.
this.mAction = o.mAction;
this.mData = o.mData;
this.mType = o.mType;
this.mPackage = o.mPackage;
this.mComponent = o.mComponent;
this.mFlags = o.mFlags;
this.mContentUserHint = o.mContentUserHint;
if (o.mCategories != null) {
this.mCategories = new ArraySet<String>(o.mCategories);
}
if (o.mExtras != null) {
this.mExtras = new Bundle(o.mExtras);
}
if (o.mSourceBounds != null) {
this.mSourceBounds = new Rect(o.mSourceBounds);
}
if (o.mSelector != null) {
this.mSelector = new Intent(o.mSelector);
}
if (o.mClipData != null) {
this.mClipData = new ClipData(o.mClipData);
}
| private Intent(Intent o, boolean all)
this.mAction = o.mAction;
this.mData = o.mData;
this.mType = o.mType;
this.mPackage = o.mPackage;
this.mComponent = o.mComponent;
if (o.mCategories != null) {
this.mCategories = new ArraySet<String>(o.mCategories);
}
| public Intent(String action)Create an intent with a given action. All other fields (data, type,
class) are null. Note that the action must be in a
namespace because Intents are used globally in the system -- for
example the system VIEW action is android.intent.action.VIEW; an
application's custom action would be something like
com.google.app.myapp.CUSTOM_ACTION.
setAction(action);
|
Methods Summary |
---|
public android.content.Intent | addCategory(java.lang.String category)Add a new category to the intent. Categories provide additional detail
about the action the intent performs. When resolving an intent, only
activities that provide all of the requested categories will be
used.
if (mCategories == null) {
mCategories = new ArraySet<String>();
}
mCategories.add(category.intern());
return this;
| public android.content.Intent | addFlags(int flags)Add additional flags to the intent (or with existing flags
value).
mFlags |= flags;
return this;
| public java.lang.Object | clone()
return new Intent(this);
| public android.content.Intent | cloneFilter()Make a clone of only the parts of the Intent that are relevant for
filter matching: the action, data, type, component, and categories.
return new Intent(this, false);
| public static android.content.Intent | createChooser(android.content.Intent target, java.lang.CharSequence title)Convenience function for creating a {@link #ACTION_CHOOSER} Intent.
Builds a new {@link #ACTION_CHOOSER} Intent that wraps the given
target intent, also optionally supplying a title. If the target
intent has specified {@link #FLAG_GRANT_READ_URI_PERMISSION} or
{@link #FLAG_GRANT_WRITE_URI_PERMISSION}, then these flags will also be
set in the returned chooser intent, with its ClipData set appropriately:
either a direct reflection of {@link #getClipData()} if that is non-null,
or a new ClipData built from {@link #getData()}.
return createChooser(target, title, null);
| public static android.content.Intent | createChooser(android.content.Intent target, java.lang.CharSequence title, IntentSender sender)Convenience function for creating a {@link #ACTION_CHOOSER} Intent.
Builds a new {@link #ACTION_CHOOSER} Intent that wraps the given
target intent, also optionally supplying a title. If the target
intent has specified {@link #FLAG_GRANT_READ_URI_PERMISSION} or
{@link #FLAG_GRANT_WRITE_URI_PERMISSION}, then these flags will also be
set in the returned chooser intent, with its ClipData set appropriately:
either a direct reflection of {@link #getClipData()} if that is non-null,
or a new ClipData built from {@link #getData()}.
The caller may optionally supply an {@link IntentSender} to receive a callback
when the user makes a choice. This can be useful if the calling application wants
to remember the last chosen target and surface it as a more prominent or one-touch
affordance elsewhere in the UI for next time.
Intent intent = new Intent(ACTION_CHOOSER);
intent.putExtra(EXTRA_INTENT, target);
if (title != null) {
intent.putExtra(EXTRA_TITLE, title);
}
if (sender != null) {
intent.putExtra(EXTRA_CHOSEN_COMPONENT_INTENT_SENDER, sender);
}
// Migrate any clip data and flags from target.
int permFlags = target.getFlags() & (FLAG_GRANT_READ_URI_PERMISSION
| FLAG_GRANT_WRITE_URI_PERMISSION | FLAG_GRANT_PERSISTABLE_URI_PERMISSION
| FLAG_GRANT_PREFIX_URI_PERMISSION);
if (permFlags != 0) {
ClipData targetClipData = target.getClipData();
if (targetClipData == null && target.getData() != null) {
ClipData.Item item = new ClipData.Item(target.getData());
String[] mimeTypes;
if (target.getType() != null) {
mimeTypes = new String[] { target.getType() };
} else {
mimeTypes = new String[] { };
}
targetClipData = new ClipData(null, mimeTypes, item);
}
if (targetClipData != null) {
intent.setClipData(targetClipData);
intent.addFlags(permFlags);
}
}
return intent;
| public int | describeContents()
return (mExtras != null) ? mExtras.describeContents() : 0;
| public int | fillIn(android.content.Intent other, int flags)Copy the contents of other in to this object, but only
where fields are not defined by this object. For purposes of a field
being defined, the following pieces of data in the Intent are
considered to be separate fields:
- action, as set by {@link #setAction}.
- data Uri and MIME type, as set by {@link #setData(Uri)},
{@link #setType(String)}, or {@link #setDataAndType(Uri, String)}.
- categories, as set by {@link #addCategory}.
- package, as set by {@link #setPackage}.
- component, as set by {@link #setComponent(ComponentName)} or
related methods.
- source bounds, as set by {@link #setSourceBounds}.
- selector, as set by {@link #setSelector(Intent)}.
- clip data, as set by {@link #setClipData(ClipData)}.
- each top-level name in the associated extras.
In addition, you can use the {@link #FILL_IN_ACTION},
{@link #FILL_IN_DATA}, {@link #FILL_IN_CATEGORIES}, {@link #FILL_IN_PACKAGE},
{@link #FILL_IN_COMPONENT}, {@link #FILL_IN_SOURCE_BOUNDS},
{@link #FILL_IN_SELECTOR}, and {@link #FILL_IN_CLIP_DATA} to override
the restriction where the corresponding field will not be replaced if
it is already set.
Note: The component field will only be copied if {@link #FILL_IN_COMPONENT}
is explicitly specified. The selector will only be copied if
{@link #FILL_IN_SELECTOR} is explicitly specified.
For example, consider Intent A with {data="foo", categories="bar"}
and Intent B with {action="gotit", data-type="some/thing",
categories="one","two"}.
Calling A.fillIn(B, Intent.FILL_IN_DATA) will result in A now
containing: {action="gotit", data-type="some/thing",
categories="bar"}.
int changes = 0;
boolean mayHaveCopiedUris = false;
if (other.mAction != null
&& (mAction == null || (flags&FILL_IN_ACTION) != 0)) {
mAction = other.mAction;
changes |= FILL_IN_ACTION;
}
if ((other.mData != null || other.mType != null)
&& ((mData == null && mType == null)
|| (flags&FILL_IN_DATA) != 0)) {
mData = other.mData;
mType = other.mType;
changes |= FILL_IN_DATA;
mayHaveCopiedUris = true;
}
if (other.mCategories != null
&& (mCategories == null || (flags&FILL_IN_CATEGORIES) != 0)) {
if (other.mCategories != null) {
mCategories = new ArraySet<String>(other.mCategories);
}
changes |= FILL_IN_CATEGORIES;
}
if (other.mPackage != null
&& (mPackage == null || (flags&FILL_IN_PACKAGE) != 0)) {
// Only do this if mSelector is not set.
if (mSelector == null) {
mPackage = other.mPackage;
changes |= FILL_IN_PACKAGE;
}
}
// Selector is special: it can only be set if explicitly allowed,
// for the same reason as the component name.
if (other.mSelector != null && (flags&FILL_IN_SELECTOR) != 0) {
if (mPackage == null) {
mSelector = new Intent(other.mSelector);
mPackage = null;
changes |= FILL_IN_SELECTOR;
}
}
if (other.mClipData != null
&& (mClipData == null || (flags&FILL_IN_CLIP_DATA) != 0)) {
mClipData = other.mClipData;
changes |= FILL_IN_CLIP_DATA;
mayHaveCopiedUris = true;
}
// Component is special: it can -only- be set if explicitly allowed,
// since otherwise the sender could force the intent somewhere the
// originator didn't intend.
if (other.mComponent != null && (flags&FILL_IN_COMPONENT) != 0) {
mComponent = other.mComponent;
changes |= FILL_IN_COMPONENT;
}
mFlags |= other.mFlags;
if (other.mSourceBounds != null
&& (mSourceBounds == null || (flags&FILL_IN_SOURCE_BOUNDS) != 0)) {
mSourceBounds = new Rect(other.mSourceBounds);
changes |= FILL_IN_SOURCE_BOUNDS;
}
if (mExtras == null) {
if (other.mExtras != null) {
mExtras = new Bundle(other.mExtras);
mayHaveCopiedUris = true;
}
} else if (other.mExtras != null) {
try {
Bundle newb = new Bundle(other.mExtras);
newb.putAll(mExtras);
mExtras = newb;
mayHaveCopiedUris = true;
} catch (RuntimeException e) {
// Modifying the extras can cause us to unparcel the contents
// of the bundle, and if we do this in the system process that
// may fail. We really should handle this (i.e., the Bundle
// impl shouldn't be on top of a plain map), but for now just
// ignore it and keep the original contents. :(
Log.w("Intent", "Failure filling in extras", e);
}
}
if (mayHaveCopiedUris && mContentUserHint == UserHandle.USER_CURRENT
&& other.mContentUserHint != UserHandle.USER_CURRENT) {
mContentUserHint = other.mContentUserHint;
}
return changes;
| public boolean | filterEquals(android.content.Intent other)Determine if two intents are the same for the purposes of intent
resolution (filtering). That is, if their action, data, type,
class, and categories are the same. This does not compare
any extra data included in the intents.
if (other == null) {
return false;
}
if (!Objects.equals(this.mAction, other.mAction)) return false;
if (!Objects.equals(this.mData, other.mData)) return false;
if (!Objects.equals(this.mType, other.mType)) return false;
if (!Objects.equals(this.mPackage, other.mPackage)) return false;
if (!Objects.equals(this.mComponent, other.mComponent)) return false;
if (!Objects.equals(this.mCategories, other.mCategories)) return false;
return true;
| public int | filterHashCode()Generate hash code that matches semantics of filterEquals().
int code = 0;
if (mAction != null) {
code += mAction.hashCode();
}
if (mData != null) {
code += mData.hashCode();
}
if (mType != null) {
code += mType.hashCode();
}
if (mPackage != null) {
code += mPackage.hashCode();
}
if (mComponent != null) {
code += mComponent.hashCode();
}
if (mCategories != null) {
code += mCategories.hashCode();
}
return code;
| public void | fixUris(int contentUserHint)
Uri data = getData();
if (data != null) {
mData = maybeAddUserId(data, contentUserHint);
}
if (mClipData != null) {
mClipData.fixUris(contentUserHint);
}
String action = getAction();
if (ACTION_SEND.equals(action)) {
final Uri stream = getParcelableExtra(EXTRA_STREAM);
if (stream != null) {
putExtra(EXTRA_STREAM, maybeAddUserId(stream, contentUserHint));
}
} else if (ACTION_SEND_MULTIPLE.equals(action)) {
final ArrayList<Uri> streams = getParcelableArrayListExtra(EXTRA_STREAM);
if (streams != null) {
ArrayList<Uri> newStreams = new ArrayList<Uri>();
for (int i = 0; i < streams.size(); i++) {
newStreams.add(maybeAddUserId(streams.get(i), contentUserHint));
}
putParcelableArrayListExtra(EXTRA_STREAM, newStreams);
}
} else if (MediaStore.ACTION_IMAGE_CAPTURE.equals(action)
|| MediaStore.ACTION_IMAGE_CAPTURE_SECURE.equals(action)
|| MediaStore.ACTION_VIDEO_CAPTURE.equals(action)) {
final Uri output = getParcelableExtra(MediaStore.EXTRA_OUTPUT);
if (output != null) {
putExtra(MediaStore.EXTRA_OUTPUT, maybeAddUserId(output, contentUserHint));
}
}
| public java.lang.String | getAction()Retrieve the general action to be performed, such as
{@link #ACTION_VIEW}. The action describes the general way the rest of
the information in the intent should be interpreted -- most importantly,
what to do with the data returned by {@link #getData}.
return mAction;
| public boolean[] | getBooleanArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getBooleanArray(name);
| public boolean | getBooleanExtra(java.lang.String name, boolean defaultValue)Retrieve extended data from the intent.
return mExtras == null ? defaultValue :
mExtras.getBoolean(name, defaultValue);
| public android.os.Bundle | getBundleExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getBundle(name);
| public byte[] | getByteArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getByteArray(name);
| public byte | getByteExtra(java.lang.String name, byte defaultValue)Retrieve extended data from the intent.
return mExtras == null ? defaultValue :
mExtras.getByte(name, defaultValue);
| public java.util.Set | getCategories()Return the set of all categories in the intent. If there are no categories,
returns NULL.
return mCategories;
| public char[] | getCharArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getCharArray(name);
| public char | getCharExtra(java.lang.String name, char defaultValue)Retrieve extended data from the intent.
return mExtras == null ? defaultValue :
mExtras.getChar(name, defaultValue);
| public java.lang.CharSequence[] | getCharSequenceArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getCharSequenceArray(name);
| public java.util.ArrayList | getCharSequenceArrayListExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getCharSequenceArrayList(name);
| public java.lang.CharSequence | getCharSequenceExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getCharSequence(name);
| public ClipData | getClipData()Return the {@link ClipData} associated with this Intent. If there is
none, returns null. See {@link #setClipData} for more information.
return mClipData;
| public ComponentName | getComponent()Retrieve the concrete component associated with the intent. When receiving
an intent, this is the component that was found to best handle it (that is,
yourself) and will always be non-null; in all other cases it will be
null unless explicitly set.
return mComponent;
| public int | getContentUserHint()
return mContentUserHint;
| public android.net.Uri | getData()Retrieve data this intent is operating on. This URI specifies the name
of the data; often it uses the content: scheme, specifying data in a
content provider. Other schemes may be handled by specific activities,
such as http: by the web browser.
return mData;
| public java.lang.String | getDataString()The same as {@link #getData()}, but returns the URI as an encoded
String.
return mData != null ? mData.toString() : null;
| public double[] | getDoubleArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getDoubleArray(name);
| public double | getDoubleExtra(java.lang.String name, double defaultValue)Retrieve extended data from the intent.
return mExtras == null ? defaultValue :
mExtras.getDouble(name, defaultValue);
| public java.lang.Object | getExtra(java.lang.String name)Retrieve extended data from the intent.
return getExtra(name, null);
| public java.lang.Object | getExtra(java.lang.String name, java.lang.Object defaultValue)Retrieve extended data from the intent.
Object result = defaultValue;
if (mExtras != null) {
Object result2 = mExtras.get(name);
if (result2 != null) {
result = result2;
}
}
return result;
| public android.os.Bundle | getExtras()Retrieves a map of extended data from the intent.
return (mExtras != null)
? new Bundle(mExtras)
: null;
| public int | getFlags()Retrieve any special flags associated with this intent. You will
normally just set them with {@link #setFlags} and let the system
take the appropriate action with them.
return mFlags;
| public float[] | getFloatArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getFloatArray(name);
| public float | getFloatExtra(java.lang.String name, float defaultValue)Retrieve extended data from the intent.
return mExtras == null ? defaultValue :
mExtras.getFloat(name, defaultValue);
| public android.os.IBinder | getIBinderExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getIBinder(name);
| public int[] | getIntArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getIntArray(name);
| public int | getIntExtra(java.lang.String name, int defaultValue)Retrieve extended data from the intent.
return mExtras == null ? defaultValue :
mExtras.getInt(name, defaultValue);
| public java.util.ArrayList | getIntegerArrayListExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getIntegerArrayList(name);
| public static android.content.Intent | getIntent(java.lang.String uri)Call {@link #parseUri} with 0 flags.
return parseUri(uri, 0);
| public static android.content.Intent | getIntentOld(java.lang.String uri)
return getIntentOld(uri, 0);
| private static android.content.Intent | getIntentOld(java.lang.String uri, int flags)
Intent intent;
int i = uri.lastIndexOf('#");
if (i >= 0) {
String action = null;
final int intentFragmentStart = i;
boolean isIntentFragment = false;
i++;
if (uri.regionMatches(i, "action(", 0, 7)) {
isIntentFragment = true;
i += 7;
int j = uri.indexOf(')", i);
action = uri.substring(i, j);
i = j + 1;
}
intent = new Intent(action);
if (uri.regionMatches(i, "categories(", 0, 11)) {
isIntentFragment = true;
i += 11;
int j = uri.indexOf(')", i);
while (i < j) {
int sep = uri.indexOf('!", i);
if (sep < 0 || sep > j) sep = j;
if (i < sep) {
intent.addCategory(uri.substring(i, sep));
}
i = sep + 1;
}
i = j + 1;
}
if (uri.regionMatches(i, "type(", 0, 5)) {
isIntentFragment = true;
i += 5;
int j = uri.indexOf(')", i);
intent.mType = uri.substring(i, j);
i = j + 1;
}
if (uri.regionMatches(i, "launchFlags(", 0, 12)) {
isIntentFragment = true;
i += 12;
int j = uri.indexOf(')", i);
intent.mFlags = Integer.decode(uri.substring(i, j)).intValue();
if ((flags& URI_ALLOW_UNSAFE) == 0) {
intent.mFlags &= ~IMMUTABLE_FLAGS;
}
i = j + 1;
}
if (uri.regionMatches(i, "component(", 0, 10)) {
isIntentFragment = true;
i += 10;
int j = uri.indexOf(')", i);
int sep = uri.indexOf('!", i);
if (sep >= 0 && sep < j) {
String pkg = uri.substring(i, sep);
String cls = uri.substring(sep + 1, j);
intent.mComponent = new ComponentName(pkg, cls);
}
i = j + 1;
}
if (uri.regionMatches(i, "extras(", 0, 7)) {
isIntentFragment = true;
i += 7;
final int closeParen = uri.indexOf(')", i);
if (closeParen == -1) throw new URISyntaxException(uri,
"EXTRA missing trailing ')'", i);
while (i < closeParen) {
// fetch the key value
int j = uri.indexOf('=", i);
if (j <= i + 1 || i >= closeParen) {
throw new URISyntaxException(uri, "EXTRA missing '='", i);
}
char type = uri.charAt(i);
i++;
String key = uri.substring(i, j);
i = j + 1;
// get type-value
j = uri.indexOf('!", i);
if (j == -1 || j >= closeParen) j = closeParen;
if (i >= j) throw new URISyntaxException(uri, "EXTRA missing '!'", i);
String value = uri.substring(i, j);
i = j;
// create Bundle if it doesn't already exist
if (intent.mExtras == null) intent.mExtras = new Bundle();
// add item to bundle
try {
switch (type) {
case 'S":
intent.mExtras.putString(key, Uri.decode(value));
break;
case 'B":
intent.mExtras.putBoolean(key, Boolean.parseBoolean(value));
break;
case 'b":
intent.mExtras.putByte(key, Byte.parseByte(value));
break;
case 'c":
intent.mExtras.putChar(key, Uri.decode(value).charAt(0));
break;
case 'd":
intent.mExtras.putDouble(key, Double.parseDouble(value));
break;
case 'f":
intent.mExtras.putFloat(key, Float.parseFloat(value));
break;
case 'i":
intent.mExtras.putInt(key, Integer.parseInt(value));
break;
case 'l":
intent.mExtras.putLong(key, Long.parseLong(value));
break;
case 's":
intent.mExtras.putShort(key, Short.parseShort(value));
break;
default:
throw new URISyntaxException(uri, "EXTRA has unknown type", i);
}
} catch (NumberFormatException e) {
throw new URISyntaxException(uri, "EXTRA value can't be parsed", i);
}
char ch = uri.charAt(i);
if (ch == ')") break;
if (ch != '!") throw new URISyntaxException(uri, "EXTRA missing '!'", i);
i++;
}
}
if (isIntentFragment) {
intent.mData = Uri.parse(uri.substring(0, intentFragmentStart));
} else {
intent.mData = Uri.parse(uri);
}
if (intent.mAction == null) {
// By default, if no action is specified, then use VIEW.
intent.mAction = ACTION_VIEW;
}
} else {
intent = new Intent(ACTION_VIEW, Uri.parse(uri));
}
return intent;
| public long[] | getLongArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getLongArray(name);
| public long | getLongExtra(java.lang.String name, long defaultValue)Retrieve extended data from the intent.
return mExtras == null ? defaultValue :
mExtras.getLong(name, defaultValue);
| public java.lang.String | getPackage()Retrieve the application package name this Intent is limited to. When
resolving an Intent, if non-null this limits the resolution to only
components in the given application package.
return mPackage;
| public android.os.Parcelable[] | getParcelableArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getParcelableArray(name);
| public java.util.ArrayList | getParcelableArrayListExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.<T>getParcelableArrayList(name);
| public T | getParcelableExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.<T>getParcelable(name);
| public java.lang.String | getScheme()Return the scheme portion of the intent's data. If the data is null or
does not include a scheme, null is returned. Otherwise, the scheme
prefix without the final ':' is returned, i.e. "http".
This is the same as calling getData().getScheme() (and checking for
null data).
return mData != null ? mData.getScheme() : null;
| public android.content.Intent | getSelector()Return the specific selector associated with this Intent. If there is
none, returns null. See {@link #setSelector} for more information.
return mSelector;
| public java.io.Serializable | getSerializableExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getSerializable(name);
| public short[] | getShortArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getShortArray(name);
| public short | getShortExtra(java.lang.String name, short defaultValue)Retrieve extended data from the intent.
return mExtras == null ? defaultValue :
mExtras.getShort(name, defaultValue);
| public android.graphics.Rect | getSourceBounds()Get the bounds of the sender of this intent, in screen coordinates. This can be
used as a hint to the receiver for animations and the like. Null means that there
is no source bounds.
return mSourceBounds;
| public java.lang.String[] | getStringArrayExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getStringArray(name);
| public java.util.ArrayList | getStringArrayListExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getStringArrayList(name);
| public java.lang.String | getStringExtra(java.lang.String name)Retrieve extended data from the intent.
return mExtras == null ? null : mExtras.getString(name);
| public java.lang.String | getType()Retrieve any explicit MIME type included in the intent. This is usually
null, as the type is determined by the intent data.
return mType;
| public boolean | hasCategory(java.lang.String category)Check if a category exists in the intent.
return mCategories != null && mCategories.contains(category);
| public boolean | hasExtra(java.lang.String name)Returns true if an extra value is associated with the given name.
return mExtras != null && mExtras.containsKey(name);
| public boolean | hasFileDescriptors()Returns true if the Intent's extras contain a parcelled file descriptor.
return mExtras != null && mExtras.hasFileDescriptors();
| public static boolean | isAccessUriMode(int modeFlags)Test if given mode flags specify an access mode, which must be at least
read and/or write.
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Intent flags (see mFlags variable).
return (modeFlags & (Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION)) != 0;
| public boolean | isDocument()
return (mFlags & FLAG_ACTIVITY_NEW_DOCUMENT) == FLAG_ACTIVITY_NEW_DOCUMENT;
| public boolean | isExcludingStopped()
return (mFlags&(FLAG_EXCLUDE_STOPPED_PACKAGES|FLAG_INCLUDE_STOPPED_PACKAGES))
== FLAG_EXCLUDE_STOPPED_PACKAGES;
| private static ClipData.Item | makeClipItem(java.util.ArrayList streams, java.util.ArrayList texts, java.util.ArrayList htmlTexts, int which)
Uri uri = streams != null ? streams.get(which) : null;
CharSequence text = texts != null ? texts.get(which) : null;
String htmlText = htmlTexts != null ? htmlTexts.get(which) : null;
return new ClipData.Item(text, htmlText, null, uri);
| public static android.content.Intent | makeMainActivity(ComponentName mainActivity)Create an intent to launch the main (root) activity of a task. This
is the Intent that is started when the application's is launched from
Home. For anything else that wants to launch an application in the
same way, it is important that they use an Intent structured the same
way, and can use this function to ensure this is the case.
The returned Intent has the given Activity component as its explicit
component, {@link #ACTION_MAIN} as its action, and includes the
category {@link #CATEGORY_LAUNCHER}. This does not have
{@link #FLAG_ACTIVITY_NEW_TASK} set, though typically you will want
to do that through {@link #addFlags(int)} on the returned Intent.
Intent intent = new Intent(ACTION_MAIN);
intent.setComponent(mainActivity);
intent.addCategory(CATEGORY_LAUNCHER);
return intent;
| public static android.content.Intent | makeMainSelectorActivity(java.lang.String selectorAction, java.lang.String selectorCategory)Make an Intent for the main activity of an application, without
specifying a specific activity to run but giving a selector to find
the activity. This results in a final Intent that is structured
the same as when the application is launched from
Home. For anything else that wants to launch an application in the
same way, it is important that they use an Intent structured the same
way, and can use this function to ensure this is the case.
The returned Intent has {@link #ACTION_MAIN} as its action, and includes the
category {@link #CATEGORY_LAUNCHER}. This does not have
{@link #FLAG_ACTIVITY_NEW_TASK} set, though typically you will want
to do that through {@link #addFlags(int)} on the returned Intent.
Intent intent = new Intent(ACTION_MAIN);
intent.addCategory(CATEGORY_LAUNCHER);
Intent selector = new Intent();
selector.setAction(selectorAction);
selector.addCategory(selectorCategory);
intent.setSelector(selector);
return intent;
| public static android.content.Intent | makeRestartActivityTask(ComponentName mainActivity)Make an Intent that can be used to re-launch an application's task
in its base state. This is like {@link #makeMainActivity(ComponentName)},
but also sets the flags {@link #FLAG_ACTIVITY_NEW_TASK} and
{@link #FLAG_ACTIVITY_CLEAR_TASK}.
Intent intent = makeMainActivity(mainActivity);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
return intent;
| public boolean | migrateExtraStreamToClipData()Migrate any {@link #EXTRA_STREAM} in {@link #ACTION_SEND} and
{@link #ACTION_SEND_MULTIPLE} to {@link ClipData}. Also inspects nested
intents in {@link #ACTION_CHOOSER}.
// Refuse to touch if extras already parcelled
if (mExtras != null && mExtras.isParcelled()) return false;
// Bail when someone already gave us ClipData
if (getClipData() != null) return false;
final String action = getAction();
if (ACTION_CHOOSER.equals(action)) {
// Inspect contained intents to see if we need to migrate extras. We
// don't promote ClipData to the parent, since ChooserActivity will
// already start the picked item as the caller, and we can't combine
// the flags in a safe way.
boolean migrated = false;
try {
final Intent intent = getParcelableExtra(EXTRA_INTENT);
if (intent != null) {
migrated |= intent.migrateExtraStreamToClipData();
}
} catch (ClassCastException e) {
}
try {
final Parcelable[] intents = getParcelableArrayExtra(EXTRA_INITIAL_INTENTS);
if (intents != null) {
for (int i = 0; i < intents.length; i++) {
final Intent intent = (Intent) intents[i];
if (intent != null) {
migrated |= intent.migrateExtraStreamToClipData();
}
}
}
} catch (ClassCastException e) {
}
return migrated;
} else if (ACTION_SEND.equals(action)) {
try {
final Uri stream = getParcelableExtra(EXTRA_STREAM);
final CharSequence text = getCharSequenceExtra(EXTRA_TEXT);
final String htmlText = getStringExtra(EXTRA_HTML_TEXT);
if (stream != null || text != null || htmlText != null) {
final ClipData clipData = new ClipData(
null, new String[] { getType() },
new ClipData.Item(text, htmlText, null, stream));
setClipData(clipData);
addFlags(FLAG_GRANT_READ_URI_PERMISSION);
return true;
}
} catch (ClassCastException e) {
}
} else if (ACTION_SEND_MULTIPLE.equals(action)) {
try {
final ArrayList<Uri> streams = getParcelableArrayListExtra(EXTRA_STREAM);
final ArrayList<CharSequence> texts = getCharSequenceArrayListExtra(EXTRA_TEXT);
final ArrayList<String> htmlTexts = getStringArrayListExtra(EXTRA_HTML_TEXT);
int num = -1;
if (streams != null) {
num = streams.size();
}
if (texts != null) {
if (num >= 0 && num != texts.size()) {
// Wha...! F- you.
return false;
}
num = texts.size();
}
if (htmlTexts != null) {
if (num >= 0 && num != htmlTexts.size()) {
// Wha...! F- you.
return false;
}
num = htmlTexts.size();
}
if (num > 0) {
final ClipData clipData = new ClipData(
null, new String[] { getType() },
makeClipItem(streams, texts, htmlTexts, 0));
for (int i = 1; i < num; i++) {
clipData.addItem(makeClipItem(streams, texts, htmlTexts, i));
}
setClipData(clipData);
addFlags(FLAG_GRANT_READ_URI_PERMISSION);
return true;
}
} catch (ClassCastException e) {
}
} else if (MediaStore.ACTION_IMAGE_CAPTURE.equals(action)
|| MediaStore.ACTION_IMAGE_CAPTURE_SECURE.equals(action)
|| MediaStore.ACTION_VIDEO_CAPTURE.equals(action)) {
final Uri output;
try {
output = getParcelableExtra(MediaStore.EXTRA_OUTPUT);
} catch (ClassCastException e) {
return false;
}
if (output != null) {
setClipData(ClipData.newRawUri("", output));
addFlags(FLAG_GRANT_WRITE_URI_PERMISSION|FLAG_GRANT_READ_URI_PERMISSION);
return true;
}
}
return false;
| public static java.lang.String | normalizeMimeType(java.lang.String type)Normalize a MIME data type.
A normalized MIME type has white-space trimmed,
content-type parameters removed, and is lower-case.
This aligns the type with Android best practices for
intent filtering.
For example, "text/plain; charset=utf-8" becomes "text/plain".
"text/x-vCard" becomes "text/x-vcard".
All MIME types received from outside Android (such as user input,
or external sources like Bluetooth, NFC, or the Internet) should
be normalized before they are used to create an Intent.
if (type == null) {
return null;
}
type = type.trim().toLowerCase(Locale.ROOT);
final int semicolonIndex = type.indexOf(';");
if (semicolonIndex != -1) {
type = type.substring(0, semicolonIndex);
}
return type;
| public static android.content.Intent | parseIntent(android.content.res.Resources resources, org.xmlpull.v1.XmlPullParser parser, android.util.AttributeSet attrs)Parses the "intent" element (and its children) from XML and instantiates
an Intent object. The given XML parser should be located at the tag
where parsing should start (often named "intent"), from which the
basic action, data, type, and package and class name will be
retrieved. The function will then parse in to any child elements,
looking for tags to add categories and
to attach extra data
to the intent.
Intent intent = new Intent();
TypedArray sa = resources.obtainAttributes(attrs,
com.android.internal.R.styleable.Intent);
intent.setAction(sa.getString(com.android.internal.R.styleable.Intent_action));
String data = sa.getString(com.android.internal.R.styleable.Intent_data);
String mimeType = sa.getString(com.android.internal.R.styleable.Intent_mimeType);
intent.setDataAndType(data != null ? Uri.parse(data) : null, mimeType);
String packageName = sa.getString(com.android.internal.R.styleable.Intent_targetPackage);
String className = sa.getString(com.android.internal.R.styleable.Intent_targetClass);
if (packageName != null && className != null) {
intent.setComponent(new ComponentName(packageName, className));
}
sa.recycle();
int outerDepth = parser.getDepth();
int type;
while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
continue;
}
String nodeName = parser.getName();
if (nodeName.equals(TAG_CATEGORIES)) {
sa = resources.obtainAttributes(attrs,
com.android.internal.R.styleable.IntentCategory);
String cat = sa.getString(com.android.internal.R.styleable.IntentCategory_name);
sa.recycle();
if (cat != null) {
intent.addCategory(cat);
}
XmlUtils.skipCurrentTag(parser);
} else if (nodeName.equals(TAG_EXTRA)) {
if (intent.mExtras == null) {
intent.mExtras = new Bundle();
}
resources.parseBundleExtra(TAG_EXTRA, attrs, intent.mExtras);
XmlUtils.skipCurrentTag(parser);
} else {
XmlUtils.skipCurrentTag(parser);
}
}
return intent;
| public static android.content.Intent | parseUri(java.lang.String uri, int flags)Create an intent from a URI. This URI may encode the action,
category, and other intent fields, if it was returned by
{@link #toUri}. If the Intent was not generate by toUri(), its data
will be the entire URI and its action will be ACTION_VIEW.
The URI given here must not be relative -- that is, it must include
the scheme and full path.
int i = 0;
try {
final boolean androidApp = uri.startsWith("android-app:");
// Validate intent scheme if requested.
if ((flags&(URI_INTENT_SCHEME|URI_ANDROID_APP_SCHEME)) != 0) {
if (!uri.startsWith("intent:") && !androidApp) {
Intent intent = new Intent(ACTION_VIEW);
try {
intent.setData(Uri.parse(uri));
} catch (IllegalArgumentException e) {
throw new URISyntaxException(uri, e.getMessage());
}
return intent;
}
}
i = uri.lastIndexOf("#");
// simple case
if (i == -1) {
if (!androidApp) {
return new Intent(ACTION_VIEW, Uri.parse(uri));
}
// old format Intent URI
} else if (!uri.startsWith("#Intent;", i)) {
if (!androidApp) {
return getIntentOld(uri, flags);
} else {
i = -1;
}
}
// new format
Intent intent = new Intent(ACTION_VIEW);
Intent baseIntent = intent;
boolean explicitAction = false;
boolean inSelector = false;
// fetch data part, if present
String scheme = null;
String data;
if (i >= 0) {
data = uri.substring(0, i);
i += 8; // length of "#Intent;"
} else {
data = uri;
}
// loop over contents of Intent, all name=value;
while (i >= 0 && !uri.startsWith("end", i)) {
int eq = uri.indexOf('=", i);
if (eq < 0) eq = i-1;
int semi = uri.indexOf(';", i);
String value = eq < semi ? Uri.decode(uri.substring(eq + 1, semi)) : "";
// action
if (uri.startsWith("action=", i)) {
intent.setAction(value);
if (!inSelector) {
explicitAction = true;
}
}
// categories
else if (uri.startsWith("category=", i)) {
intent.addCategory(value);
}
// type
else if (uri.startsWith("type=", i)) {
intent.mType = value;
}
// launch flags
else if (uri.startsWith("launchFlags=", i)) {
intent.mFlags = Integer.decode(value).intValue();
if ((flags& URI_ALLOW_UNSAFE) == 0) {
intent.mFlags &= ~IMMUTABLE_FLAGS;
}
}
// package
else if (uri.startsWith("package=", i)) {
intent.mPackage = value;
}
// component
else if (uri.startsWith("component=", i)) {
intent.mComponent = ComponentName.unflattenFromString(value);
}
// scheme
else if (uri.startsWith("scheme=", i)) {
if (inSelector) {
intent.mData = Uri.parse(value + ":");
} else {
scheme = value;
}
}
// source bounds
else if (uri.startsWith("sourceBounds=", i)) {
intent.mSourceBounds = Rect.unflattenFromString(value);
}
// selector
else if (semi == (i+3) && uri.startsWith("SEL", i)) {
intent = new Intent();
inSelector = true;
}
// extra
else {
String key = Uri.decode(uri.substring(i + 2, eq));
// create Bundle if it doesn't already exist
if (intent.mExtras == null) intent.mExtras = new Bundle();
Bundle b = intent.mExtras;
// add EXTRA
if (uri.startsWith("S.", i)) b.putString(key, value);
else if (uri.startsWith("B.", i)) b.putBoolean(key, Boolean.parseBoolean(value));
else if (uri.startsWith("b.", i)) b.putByte(key, Byte.parseByte(value));
else if (uri.startsWith("c.", i)) b.putChar(key, value.charAt(0));
else if (uri.startsWith("d.", i)) b.putDouble(key, Double.parseDouble(value));
else if (uri.startsWith("f.", i)) b.putFloat(key, Float.parseFloat(value));
else if (uri.startsWith("i.", i)) b.putInt(key, Integer.parseInt(value));
else if (uri.startsWith("l.", i)) b.putLong(key, Long.parseLong(value));
else if (uri.startsWith("s.", i)) b.putShort(key, Short.parseShort(value));
else throw new URISyntaxException(uri, "unknown EXTRA type", i);
}
// move to the next item
i = semi + 1;
}
if (inSelector) {
// The Intent had a selector; fix it up.
if (baseIntent.mPackage == null) {
baseIntent.setSelector(intent);
}
intent = baseIntent;
}
if (data != null) {
if (data.startsWith("intent:")) {
data = data.substring(7);
if (scheme != null) {
data = scheme + ':" + data;
}
} else if (data.startsWith("android-app:")) {
if (data.charAt(12) == '/" && data.charAt(13) == '/") {
// Correctly formed android-app, first part is package name.
int end = data.indexOf('/", 14);
if (end < 0) {
// All we have is a package name.
intent.mPackage = data.substring(14);
if (!explicitAction) {
intent.setAction(ACTION_MAIN);
}
data = "";
} else {
// Target the Intent at the given package name always.
String authority = null;
intent.mPackage = data.substring(14, end);
int newEnd;
if ((end+1) < data.length()) {
if ((newEnd=data.indexOf('/", end+1)) >= 0) {
// Found a scheme, remember it.
scheme = data.substring(end+1, newEnd);
end = newEnd;
if (end < data.length() && (newEnd=data.indexOf('/", end+1)) >= 0) {
// Found a authority, remember it.
authority = data.substring(end+1, newEnd);
end = newEnd;
}
} else {
// All we have is a scheme.
scheme = data.substring(end+1);
}
}
if (scheme == null) {
// If there was no scheme, then this just targets the package.
if (!explicitAction) {
intent.setAction(ACTION_MAIN);
}
data = "";
} else if (authority == null) {
data = scheme + ":";
} else {
data = scheme + "://" + authority + data.substring(end);
}
}
} else {
data = "";
}
}
if (data.length() > 0) {
try {
intent.mData = Uri.parse(data);
} catch (IllegalArgumentException e) {
throw new URISyntaxException(uri, e.getMessage());
}
}
}
return intent;
} catch (IndexOutOfBoundsException e) {
throw new URISyntaxException(uri, "illegal Intent URI format", i);
}
| public void | prepareToEnterProcess()
if (mContentUserHint != UserHandle.USER_CURRENT) {
if (UserHandle.getAppId(Process.myUid()) != Process.SYSTEM_UID) {
fixUris(mContentUserHint);
mContentUserHint = UserHandle.USER_CURRENT;
}
}
| public void | prepareToLeaveProcess()Prepare this {@link Intent} to leave an app process.
setAllowFds(false);
if (mSelector != null) {
mSelector.prepareToLeaveProcess();
}
if (mClipData != null) {
mClipData.prepareToLeaveProcess();
}
if (mData != null && StrictMode.vmFileUriExposureEnabled()) {
// There are several ACTION_MEDIA_* broadcasts that send file://
// Uris, so only check common actions.
if (ACTION_VIEW.equals(mAction) ||
ACTION_EDIT.equals(mAction) ||
ACTION_ATTACH_DATA.equals(mAction)) {
mData.checkFileUriExposed("Intent.getData()");
}
}
| public android.content.Intent | putCharSequenceArrayListExtra(java.lang.String name, java.util.ArrayList value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putCharSequenceArrayList(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, android.os.Parcelable[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putParcelableArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, java.io.Serializable value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putSerializable(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, boolean[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putBooleanArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, byte[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putByteArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, short[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putShortArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, char[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putCharArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, int[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putIntArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, long[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putLongArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, float[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putFloatArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, double[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putDoubleArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, java.lang.String[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putStringArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, java.lang.CharSequence[] value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putCharSequenceArray(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, android.os.Bundle value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putBundle(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, android.os.IBinder value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putIBinder(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, boolean value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putBoolean(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, byte value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putByte(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, char value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putChar(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, short value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putShort(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, int value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putInt(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, long value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putLong(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, float value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putFloat(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, double value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putDouble(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, java.lang.String value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, java.lang.CharSequence value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putCharSequence(name, value);
return this;
| public android.content.Intent | putExtra(java.lang.String name, android.os.Parcelable value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putParcelable(name, value);
return this;
| public android.content.Intent | putExtras(android.content.Intent src)Copy all extras in 'src' in to this intent.
if (src.mExtras != null) {
if (mExtras == null) {
mExtras = new Bundle(src.mExtras);
} else {
mExtras.putAll(src.mExtras);
}
}
return this;
| public android.content.Intent | putExtras(android.os.Bundle extras)Add a set of extended data to the intent. The keys must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putAll(extras);
return this;
| public android.content.Intent | putIntegerArrayListExtra(java.lang.String name, java.util.ArrayList value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putIntegerArrayList(name, value);
return this;
| public android.content.Intent | putParcelableArrayListExtra(java.lang.String name, java.util.ArrayList value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putParcelableArrayList(name, value);
return this;
| public android.content.Intent | putStringArrayListExtra(java.lang.String name, java.util.ArrayList value)Add extended data to the intent. The name must include a package
prefix, for example the app com.android.contacts would use names
like "com.android.contacts.ShowAll".
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putStringArrayList(name, value);
return this;
| public void | readFromParcel(android.os.Parcel in)
setAction(in.readString());
mData = Uri.CREATOR.createFromParcel(in);
mType = in.readString();
mFlags = in.readInt();
mPackage = in.readString();
mComponent = ComponentName.readFromParcel(in);
if (in.readInt() != 0) {
mSourceBounds = Rect.CREATOR.createFromParcel(in);
}
int N = in.readInt();
if (N > 0) {
mCategories = new ArraySet<String>();
int i;
for (i=0; i<N; i++) {
mCategories.add(in.readString().intern());
}
} else {
mCategories = null;
}
if (in.readInt() != 0) {
mSelector = new Intent(in);
}
if (in.readInt() != 0) {
mClipData = new ClipData(in);
}
mContentUserHint = in.readInt();
mExtras = in.readBundle();
| public void | removeCategory(java.lang.String category)Remove a category from an intent.
if (mCategories != null) {
mCategories.remove(category);
if (mCategories.size() == 0) {
mCategories = null;
}
}
| public void | removeExtra(java.lang.String name)Remove extended data from the intent.
if (mExtras != null) {
mExtras.remove(name);
if (mExtras.size() == 0) {
mExtras = null;
}
}
| public android.content.Intent | replaceExtras(android.content.Intent src)Completely replace the extras in the Intent with the extras in the
given Intent.
mExtras = src.mExtras != null ? new Bundle(src.mExtras) : null;
return this;
| public android.content.Intent | replaceExtras(android.os.Bundle extras)Completely replace the extras in the Intent with the given Bundle of
extras.
mExtras = extras != null ? new Bundle(extras) : null;
return this;
| public ComponentName | resolveActivity(android.content.pm.PackageManager pm)Return the Activity component that should be used to handle this intent.
The appropriate component is determined based on the information in the
intent, evaluated as follows:
If {@link #getComponent} returns an explicit class, that is returned
without any further consideration.
The activity must handle the {@link Intent#CATEGORY_DEFAULT} Intent
category to be considered.
If {@link #getAction} is non-NULL, the activity must handle this
action.
If {@link #resolveType} returns non-NULL, the activity must handle
this type.
If {@link #addCategory} has added any categories, the activity must
handle ALL of the categories specified.
If {@link #getPackage} is non-NULL, only activity components in
that application package will be considered.
If there are no activities that satisfy all of these conditions, a
null string is returned.
If multiple activities are found to satisfy the intent, the one with
the highest priority will be used. If there are multiple activities
with the same priority, the system will either pick the best activity
based on user preference, or resolve to a system class that will allow
the user to pick an activity and forward from there.
This method is implemented simply by calling
{@link PackageManager#resolveActivity} with the "defaultOnly" parameter
true.
This API is called for you as part of starting an activity from an
intent. You do not normally need to call it yourself.
if (mComponent != null) {
return mComponent;
}
ResolveInfo info = pm.resolveActivity(
this, PackageManager.MATCH_DEFAULT_ONLY);
if (info != null) {
return new ComponentName(
info.activityInfo.applicationInfo.packageName,
info.activityInfo.name);
}
return null;
| public android.content.pm.ActivityInfo | resolveActivityInfo(android.content.pm.PackageManager pm, int flags)Resolve the Intent into an {@link ActivityInfo}
describing the activity that should execute the intent. Resolution
follows the same rules as described for {@link #resolveActivity}, but
you get back the completely information about the resolved activity
instead of just its class name.
ActivityInfo ai = null;
if (mComponent != null) {
try {
ai = pm.getActivityInfo(mComponent, flags);
} catch (PackageManager.NameNotFoundException e) {
// ignore
}
} else {
ResolveInfo info = pm.resolveActivity(
this, PackageManager.MATCH_DEFAULT_ONLY | flags);
if (info != null) {
ai = info.activityInfo;
}
}
return ai;
| public ComponentName | resolveSystemService(android.content.pm.PackageManager pm, int flags)Special function for use by the system to resolve service
intents to system apps. Throws an exception if there are
multiple potential matches to the Intent. Returns null if
there are no matches.
if (mComponent != null) {
return mComponent;
}
List<ResolveInfo> results = pm.queryIntentServices(this, flags);
if (results == null) {
return null;
}
ComponentName comp = null;
for (int i=0; i<results.size(); i++) {
ResolveInfo ri = results.get(i);
if ((ri.serviceInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) {
continue;
}
ComponentName foundComp = new ComponentName(ri.serviceInfo.applicationInfo.packageName,
ri.serviceInfo.name);
if (comp != null) {
throw new IllegalStateException("Multiple system services handle " + this
+ ": " + comp + ", " + foundComp);
}
comp = foundComp;
}
return comp;
| public java.lang.String | resolveType(Context context)Return the MIME data type of this intent. If the type field is
explicitly set, that is simply returned. Otherwise, if the data is set,
the type of that data is returned. If neither fields are set, a null is
returned.
return resolveType(context.getContentResolver());
| public java.lang.String | resolveType(ContentResolver resolver)Return the MIME data type of this intent. If the type field is
explicitly set, that is simply returned. Otherwise, if the data is set,
the type of that data is returned. If neither fields are set, a null is
returned.
if (mType != null) {
return mType;
}
if (mData != null) {
if ("content".equals(mData.getScheme())) {
return resolver.getType(mData);
}
}
return null;
| public java.lang.String | resolveTypeIfNeeded(ContentResolver resolver)Return the MIME data type of this intent, only if it will be needed for
intent resolution. This is not generally useful for application code;
it is used by the frameworks for communicating with back-end system
services.
if (mComponent != null) {
return mType;
}
return resolveType(resolver);
| public static android.content.Intent | restoreFromXml(org.xmlpull.v1.XmlPullParser in)
Intent intent = new Intent();
final int outerDepth = in.getDepth();
int attrCount = in.getAttributeCount();
for (int attrNdx = attrCount - 1; attrNdx >= 0; --attrNdx) {
final String attrName = in.getAttributeName(attrNdx);
final String attrValue = in.getAttributeValue(attrNdx);
if (ATTR_ACTION.equals(attrName)) {
intent.setAction(attrValue);
} else if (ATTR_DATA.equals(attrName)) {
intent.setData(Uri.parse(attrValue));
} else if (ATTR_TYPE.equals(attrName)) {
intent.setType(attrValue);
} else if (ATTR_COMPONENT.equals(attrName)) {
intent.setComponent(ComponentName.unflattenFromString(attrValue));
} else if (ATTR_FLAGS.equals(attrName)) {
intent.setFlags(Integer.valueOf(attrValue, 16));
} else {
Log.e("Intent", "restoreFromXml: unknown attribute=" + attrName);
}
}
int event;
String name;
while (((event = in.next()) != XmlPullParser.END_DOCUMENT) &&
(event != XmlPullParser.END_TAG || in.getDepth() < outerDepth)) {
if (event == XmlPullParser.START_TAG) {
name = in.getName();
if (TAG_CATEGORIES.equals(name)) {
attrCount = in.getAttributeCount();
for (int attrNdx = attrCount - 1; attrNdx >= 0; --attrNdx) {
intent.addCategory(in.getAttributeValue(attrNdx));
}
} else {
Log.w("Intent", "restoreFromXml: unknown name=" + name);
XmlUtils.skipCurrentTag(in);
}
}
}
return intent;
| public void | saveToXml(org.xmlpull.v1.XmlSerializer out)
if (mAction != null) {
out.attribute(null, ATTR_ACTION, mAction);
}
if (mData != null) {
out.attribute(null, ATTR_DATA, mData.toString());
}
if (mType != null) {
out.attribute(null, ATTR_TYPE, mType);
}
if (mComponent != null) {
out.attribute(null, ATTR_COMPONENT, mComponent.flattenToShortString());
}
out.attribute(null, ATTR_FLAGS, Integer.toHexString(getFlags()));
if (mCategories != null) {
out.startTag(null, TAG_CATEGORIES);
for (int categoryNdx = mCategories.size() - 1; categoryNdx >= 0; --categoryNdx) {
out.attribute(null, ATTR_CATEGORY, mCategories.valueAt(categoryNdx));
}
out.endTag(null, TAG_CATEGORIES);
}
| public android.content.Intent | setAction(java.lang.String action)Set the general action to be performed.
mAction = action != null ? action.intern() : null;
return this;
| public void | setAllowFds(boolean allowFds)
if (mExtras != null) {
mExtras.setAllowFds(allowFds);
}
| public android.content.Intent | setClass(Context packageContext, java.lang.Class cls)Convenience for calling {@link #setComponent(ComponentName)} with the
name returned by a {@link Class} object.
mComponent = new ComponentName(packageContext, cls);
return this;
| public android.content.Intent | setClassName(Context packageContext, java.lang.String className)Convenience for calling {@link #setComponent} with an
explicit class name.
mComponent = new ComponentName(packageContext, className);
return this;
| public android.content.Intent | setClassName(java.lang.String packageName, java.lang.String className)Convenience for calling {@link #setComponent} with an
explicit application package name and class name.
mComponent = new ComponentName(packageName, className);
return this;
| public void | setClipData(ClipData clip)Set a {@link ClipData} associated with this Intent. This replaces any
previously set ClipData.
The ClipData in an intent is not used for Intent matching or other
such operations. Semantically it is like extras, used to transmit
additional data with the Intent. The main feature of using this over
the extras for data is that {@link #FLAG_GRANT_READ_URI_PERMISSION}
and {@link #FLAG_GRANT_WRITE_URI_PERMISSION} will operate on any URI
items included in the clip data. This is useful, in particular, if
you want to transmit an Intent containing multiple content:
URIs for which the recipient may not have global permission to access the
content provider.
If the ClipData contains items that are themselves Intents, any
grant flags in those Intents will be ignored. Only the top-level flags
of the main Intent are respected, and will be applied to all Uri or
Intent items in the clip (or sub-items of the clip).
The MIME type, label, and icon in the ClipData object are not
directly used by Intent. Applications should generally rely on the
MIME type of the Intent itself, not what it may find in the ClipData.
A common practice is to construct a ClipData for use with an Intent
with a MIME type of "*/*".
mClipData = clip;
| public android.content.Intent | setComponent(ComponentName component)(Usually optional) Explicitly set the component to handle the intent.
If left with the default value of null, the system will determine the
appropriate class to use based on the other fields (action, data,
type, categories) in the Intent. If this class is defined, the
specified class will always be used regardless of the other fields. You
should only set this value when you know you absolutely want a specific
class to be used; otherwise it is better to let the system find the
appropriate class so that you will respect the installed applications
and user preferences.
mComponent = component;
return this;
| public void | setContentUserHint(int contentUserHint)This is NOT a secure mechanism to identify the user who sent the intent.
When the intent is sent to a different user, it is used to fix uris by adding the userId
who sent the intent.
mContentUserHint = contentUserHint;
| public android.content.Intent | setData(android.net.Uri data)Set the data this intent is operating on. This method automatically
clears any type that was previously set by {@link #setType} or
{@link #setTypeAndNormalize}.
Note: scheme matching in the Android framework is
case-sensitive, unlike the formal RFC. As a result,
you should always write your Uri with a lower case scheme,
or use {@link Uri#normalizeScheme} or
{@link #setDataAndNormalize}
to ensure that the scheme is converted to lower case.
mData = data;
mType = null;
return this;
| public android.content.Intent | setDataAndNormalize(android.net.Uri data)Normalize and set the data this intent is operating on.
This method automatically clears any type that was
previously set (for example, by {@link #setType}).
The data Uri is normalized using
{@link android.net.Uri#normalizeScheme} before it is set,
so really this is just a convenience method for
setData(data.normalize())
return setData(data.normalizeScheme());
| public android.content.Intent | setDataAndType(android.net.Uri data, java.lang.String type)(Usually optional) Set the data for the intent along with an explicit
MIME data type. This method should very rarely be used -- it allows you
to override the MIME type that would ordinarily be inferred from the
data with your own type given here.
Note: MIME type and Uri scheme matching in the
Android framework is case-sensitive, unlike the formal RFC definitions.
As a result, you should always write these elements with lower case letters,
or use {@link #normalizeMimeType} or {@link android.net.Uri#normalizeScheme} or
{@link #setDataAndTypeAndNormalize}
to ensure that they are converted to lower case.
mData = data;
mType = type;
return this;
| public android.content.Intent | setDataAndTypeAndNormalize(android.net.Uri data, java.lang.String type)(Usually optional) Normalize and set both the data Uri and an explicit
MIME data type. This method should very rarely be used -- it allows you
to override the MIME type that would ordinarily be inferred from the
data with your own type given here.
The data Uri and the MIME type are normalize using
{@link android.net.Uri#normalizeScheme} and {@link #normalizeMimeType}
before they are set, so really this is just a convenience method for
setDataAndType(data.normalize(), Intent.normalizeMimeType(type))
return setDataAndType(data.normalizeScheme(), normalizeMimeType(type));
| public void | setExtrasClassLoader(java.lang.ClassLoader loader)Sets the ClassLoader that will be used when unmarshalling
any Parcelable values from the extras of this Intent.
if (mExtras != null) {
mExtras.setClassLoader(loader);
}
| public android.content.Intent | setFlags(int flags)Set special flags controlling how this intent is handled. Most values
here depend on the type of component being executed by the Intent,
specifically the FLAG_ACTIVITY_* flags are all for use with
{@link Context#startActivity Context.startActivity()} and the
FLAG_RECEIVER_* flags are all for use with
{@link Context#sendBroadcast(Intent) Context.sendBroadcast()}.
See the
Tasks and Back
Stack documentation for important information on how some of these options impact
the behavior of your application.
mFlags = flags;
return this;
| public android.content.Intent | setPackage(java.lang.String packageName)(Usually optional) Set an explicit application package name that limits
the components this Intent will resolve to. If left to the default
value of null, all components in all applications will considered.
If non-null, the Intent can only match the components in the given
application package.
if (packageName != null && mSelector != null) {
throw new IllegalArgumentException(
"Can't set package name when selector is already set");
}
mPackage = packageName;
return this;
| public void | setSelector(android.content.Intent selector)Set a selector for this Intent. This is a modification to the kinds of
things the Intent will match. If the selector is set, it will be used
when trying to find entities that can handle the Intent, instead of the
main contents of the Intent. This allows you build an Intent containing
a generic protocol while targeting it more specifically.
An example of where this may be used is with things like
{@link #CATEGORY_APP_BROWSER}. This category allows you to build an
Intent that will launch the Browser application. However, the correct
main entry point of an application is actually {@link #ACTION_MAIN}
{@link #CATEGORY_LAUNCHER} with {@link #setComponent(ComponentName)}
used to specify the actual Activity to launch. If you launch the browser
with something different, undesired behavior may happen if the user has
previously or later launches it the normal way, since they do not match.
Instead, you can build an Intent with the MAIN action (but no ComponentName
yet specified) and set a selector with {@link #ACTION_MAIN} and
{@link #CATEGORY_APP_BROWSER} to point it specifically to the browser activity.
Setting a selector does not impact the behavior of
{@link #filterEquals(Intent)} and {@link #filterHashCode()}. This is part of the
desired behavior of a selector -- it does not impact the base meaning
of the Intent, just what kinds of things will be matched against it
when determining who can handle it.
You can not use both a selector and {@link #setPackage(String)} on
the same base Intent.
if (selector == this) {
throw new IllegalArgumentException(
"Intent being set as a selector of itself");
}
if (selector != null && mPackage != null) {
throw new IllegalArgumentException(
"Can't set selector when package name is already set");
}
mSelector = selector;
| public void | setSourceBounds(android.graphics.Rect r)Set the bounds of the sender of this intent, in screen coordinates. This can be
used as a hint to the receiver for animations and the like. Null means that there
is no source bounds.
if (r != null) {
mSourceBounds = new Rect(r);
} else {
mSourceBounds = null;
}
| public android.content.Intent | setType(java.lang.String type)Set an explicit MIME data type.
This is used to create intents that only specify a type and not data,
for example to indicate the type of data to return.
This method automatically clears any data that was
previously set (for example by {@link #setData}).
Note: MIME type matching in the Android framework is
case-sensitive, unlike formal RFC MIME types. As a result,
you should always write your MIME types with lower case letters,
or use {@link #normalizeMimeType} or {@link #setTypeAndNormalize}
to ensure that it is converted to lower case.
mData = null;
mType = type;
return this;
| public android.content.Intent | setTypeAndNormalize(java.lang.String type)Normalize and set an explicit MIME data type.
This is used to create intents that only specify a type and not data,
for example to indicate the type of data to return.
This method automatically clears any data that was
previously set (for example by {@link #setData}).
The MIME type is normalized using
{@link #normalizeMimeType} before it is set,
so really this is just a convenience method for
setType(Intent.normalizeMimeType(type))
return setType(normalizeMimeType(type));
| public java.lang.String | toInsecureString()
StringBuilder b = new StringBuilder(128);
b.append("Intent { ");
toShortString(b, false, true, true, false);
b.append(" }");
return b.toString();
| public java.lang.String | toInsecureStringWithClip()
StringBuilder b = new StringBuilder(128);
b.append("Intent { ");
toShortString(b, false, true, true, true);
b.append(" }");
return b.toString();
| public java.lang.String | toShortString(boolean secure, boolean comp, boolean extras, boolean clip)
StringBuilder b = new StringBuilder(128);
toShortString(b, secure, comp, extras, clip);
return b.toString();
| public void | toShortString(java.lang.StringBuilder b, boolean secure, boolean comp, boolean extras, boolean clip)
boolean first = true;
if (mAction != null) {
b.append("act=").append(mAction);
first = false;
}
if (mCategories != null) {
if (!first) {
b.append(' ");
}
first = false;
b.append("cat=[");
for (int i=0; i<mCategories.size(); i++) {
if (i > 0) b.append(',");
b.append(mCategories.valueAt(i));
}
b.append("]");
}
if (mData != null) {
if (!first) {
b.append(' ");
}
first = false;
b.append("dat=");
if (secure) {
b.append(mData.toSafeString());
} else {
b.append(mData);
}
}
if (mType != null) {
if (!first) {
b.append(' ");
}
first = false;
b.append("typ=").append(mType);
}
if (mFlags != 0) {
if (!first) {
b.append(' ");
}
first = false;
b.append("flg=0x").append(Integer.toHexString(mFlags));
}
if (mPackage != null) {
if (!first) {
b.append(' ");
}
first = false;
b.append("pkg=").append(mPackage);
}
if (comp && mComponent != null) {
if (!first) {
b.append(' ");
}
first = false;
b.append("cmp=").append(mComponent.flattenToShortString());
}
if (mSourceBounds != null) {
if (!first) {
b.append(' ");
}
first = false;
b.append("bnds=").append(mSourceBounds.toShortString());
}
if (mClipData != null) {
if (!first) {
b.append(' ");
}
first = false;
if (clip) {
b.append("clip={");
mClipData.toShortString(b);
b.append('}");
} else {
b.append("(has clip)");
}
}
if (extras && mExtras != null) {
if (!first) {
b.append(' ");
}
first = false;
b.append("(has extras)");
}
if (mContentUserHint != UserHandle.USER_CURRENT) {
if (!first) {
b.append(' ");
}
first = false;
b.append("u=").append(mContentUserHint);
}
if (mSelector != null) {
b.append(" sel=");
mSelector.toShortString(b, secure, comp, extras, clip);
b.append("}");
}
| public java.lang.String | toString()
StringBuilder b = new StringBuilder(128);
b.append("Intent { ");
toShortString(b, true, true, true, false);
b.append(" }");
return b.toString();
| public java.lang.String | toURI()Call {@link #toUri} with 0 flags.
return toUri(0);
| public java.lang.String | toUri(int flags)Convert this Intent into a String holding a URI representation of it.
The returned URI string has been properly URI encoded, so it can be
used with {@link Uri#parse Uri.parse(String)}. The URI contains the
Intent's data as the base URI, with an additional fragment describing
the action, categories, type, flags, package, component, and extras.
You can convert the returned string back to an Intent with
{@link #getIntent}.
StringBuilder uri = new StringBuilder(128);
if ((flags&URI_ANDROID_APP_SCHEME) != 0) {
if (mPackage == null) {
throw new IllegalArgumentException(
"Intent must include an explicit package name to build an android-app: "
+ this);
}
uri.append("android-app://");
uri.append(mPackage);
String scheme = null;
if (mData != null) {
scheme = mData.getScheme();
if (scheme != null) {
uri.append('/");
uri.append(scheme);
String authority = mData.getEncodedAuthority();
if (authority != null) {
uri.append('/");
uri.append(authority);
String path = mData.getEncodedPath();
if (path != null) {
uri.append(path);
}
String queryParams = mData.getEncodedQuery();
if (queryParams != null) {
uri.append('?");
uri.append(queryParams);
}
String fragment = mData.getEncodedFragment();
if (fragment != null) {
uri.append('#");
uri.append(fragment);
}
}
}
}
toUriFragment(uri, null, scheme == null ? Intent.ACTION_MAIN : Intent.ACTION_VIEW,
mPackage, flags);
return uri.toString();
}
String scheme = null;
if (mData != null) {
String data = mData.toString();
if ((flags&URI_INTENT_SCHEME) != 0) {
final int N = data.length();
for (int i=0; i<N; i++) {
char c = data.charAt(i);
if ((c >= 'a" && c <= 'z") || (c >= 'A" && c <= 'Z")
|| c == '." || c == '-") {
continue;
}
if (c == ':" && i > 0) {
// Valid scheme.
scheme = data.substring(0, i);
uri.append("intent:");
data = data.substring(i+1);
break;
}
// No scheme.
break;
}
}
uri.append(data);
} else if ((flags&URI_INTENT_SCHEME) != 0) {
uri.append("intent:");
}
toUriFragment(uri, scheme, Intent.ACTION_VIEW, null, flags);
return uri.toString();
| private void | toUriFragment(java.lang.StringBuilder uri, java.lang.String scheme, java.lang.String defAction, java.lang.String defPackage, int flags)
StringBuilder frag = new StringBuilder(128);
toUriInner(frag, scheme, defAction, defPackage, flags);
if (mSelector != null) {
frag.append("SEL;");
// Note that for now we are not going to try to handle the
// data part; not clear how to represent this as a URI, and
// not much utility in it.
mSelector.toUriInner(frag, mSelector.mData != null ? mSelector.mData.getScheme() : null,
null, null, flags);
}
if (frag.length() > 0) {
uri.append("#Intent;");
uri.append(frag);
uri.append("end");
}
| private void | toUriInner(java.lang.StringBuilder uri, java.lang.String scheme, java.lang.String defAction, java.lang.String defPackage, int flags)
if (scheme != null) {
uri.append("scheme=").append(scheme).append(';");
}
if (mAction != null && !mAction.equals(defAction)) {
uri.append("action=").append(Uri.encode(mAction)).append(';");
}
if (mCategories != null) {
for (int i=0; i<mCategories.size(); i++) {
uri.append("category=").append(Uri.encode(mCategories.valueAt(i))).append(';");
}
}
if (mType != null) {
uri.append("type=").append(Uri.encode(mType, "/")).append(';");
}
if (mFlags != 0) {
uri.append("launchFlags=0x").append(Integer.toHexString(mFlags)).append(';");
}
if (mPackage != null && !mPackage.equals(defPackage)) {
uri.append("package=").append(Uri.encode(mPackage)).append(';");
}
if (mComponent != null) {
uri.append("component=").append(Uri.encode(
mComponent.flattenToShortString(), "/")).append(';");
}
if (mSourceBounds != null) {
uri.append("sourceBounds=")
.append(Uri.encode(mSourceBounds.flattenToString()))
.append(';");
}
if (mExtras != null) {
for (String key : mExtras.keySet()) {
final Object value = mExtras.get(key);
char entryType =
value instanceof String ? 'S" :
value instanceof Boolean ? 'B" :
value instanceof Byte ? 'b" :
value instanceof Character ? 'c" :
value instanceof Double ? 'd" :
value instanceof Float ? 'f" :
value instanceof Integer ? 'i" :
value instanceof Long ? 'l" :
value instanceof Short ? 's" :
'\0";
if (entryType != '\0") {
uri.append(entryType);
uri.append('.");
uri.append(Uri.encode(key));
uri.append('=");
uri.append(Uri.encode(value.toString()));
uri.append(';");
}
}
}
| public void | writeToParcel(android.os.Parcel out, int flags)
out.writeString(mAction);
Uri.writeToParcel(out, mData);
out.writeString(mType);
out.writeInt(mFlags);
out.writeString(mPackage);
ComponentName.writeToParcel(mComponent, out);
if (mSourceBounds != null) {
out.writeInt(1);
mSourceBounds.writeToParcel(out, flags);
} else {
out.writeInt(0);
}
if (mCategories != null) {
final int N = mCategories.size();
out.writeInt(N);
for (int i=0; i<N; i++) {
out.writeString(mCategories.valueAt(i));
}
} else {
out.writeInt(0);
}
if (mSelector != null) {
out.writeInt(1);
mSelector.writeToParcel(out, flags);
} else {
out.writeInt(0);
}
if (mClipData != null) {
out.writeInt(1);
mClipData.writeToParcel(out, flags);
} else {
out.writeInt(0);
}
out.writeInt(mContentUserHint);
out.writeBundle(mExtras);
|
|