page.title=<provider>
parent.title=The AndroidManifest.xml File
parent.link=manifest-intro.html
@jd:body

<dl class="xml">
<dt>syntax:</dt>
<dd>
<pre class="stx">
&lt;provider android:<a href="#auth">authorities</a>="<i>list</i>"
          android:<a href="#enabled">enabled</a>=["true" | "false"]
          android:<a href="#exported">exported</a>=["true" | "false"]
          android:<a href="#gprmsn">grantUriPermissions</a>=["true" | "false"]
          android:<a href="#icon">icon</a>="<i>drawable resource</i>"
          android:<a href="#init">initOrder</a>="<i>integer</i>"
          android:<a href="#label">label</a>="<i>string resource</i>"
          android:<a href="#multi">multiprocess</a>=["true" | "false"]
          android:<a href="#nm">name</a>="<i>string</i>"
          android:<a href="#prmsn">permission</a>="<i>string</i>"
          android:<a href="#proc">process</a>="<i>string</i>"
          android:<a href="#rprmsn">readPermission</a>="<i>string</i>"
          android:<a href="#sync">syncable</a>=["true" | "false"]
          android:<a href="#wprmsn">writePermission</a>="<i>string</i>" &gt;
    . . .
&lt;/provider&gt;</pre>
</dd>

<dt>contained in:</dt>
<dd>
    <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code>
</dd>

<dt>can contain:</dt>
<dd><code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html">&lt;meta-data&gt;</a></code>
<br/><code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">&lt;grant-uri-permission&gt;</a></code>
<br/><code><a href="{@docRoot}guide/topics/manifest/path-permission-element.html">&lt;path-permission&gt;</a></code></dd>

<dt>description:</dt>
<dd itemprop="description">
    Declares a content provider component. A content provider is a subclass of 
    {@link android.content.ContentProvider} that supplies structured access to data managed by the 
    application.  All content providers in your application must be defined in a 
    {@code <provider>} element in the manifest file; otherwise, the system is unaware of them
    and doesn't run them.
    <p>
        You only declare content providers that are part of your application. Content providers in
        other applications that you use in your application should not be declared.
    </p>  
    <p>
        The Android system stores references to content providers according to an <b>authority</b>
        string, part of the provider's <b>content URI</b>. For example, suppose you want to 
        access a content provider that stores information about health care professionals. To do
        this, you call the method 
        {@link android.content.ContentResolver#query ContentResolver.query()}, which among other
        arguments takes a URI that identifies the provider:
    </p> 
<pre>
content://com.example.project.healthcareprovider/nurses/rn
</pre>
    <p>
        The <code>content:</code> <b>scheme</b> identifies the URI as a content URI pointing to
        an Android content provider. The authority 
        <code>com.example.project.healthcareprovider</code> identifies the provider itself; the
        Android system looks up the authority in its list of known providers and their authorities. 
        The substring <code>nurses/rn</code> is a <b>path</b>, which the content provider can use 
        to identify subsets of the provider data.
    </p>
    <p>
        Notice that when you define your provider in the <code>&lt;provider&gt;</code> element, you 
        don't include the scheme or the path in the <code>android:name</code> argument, only the
        authority.    
    </p>
    <p>
        For information on using and developing content providers, see the API Guide, 
        <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.
    </p>
</dd>

<dt>attributes:</dt>
<dd>
    <dl class="attr">
        <dt><a name="auth"></a>{@code android:authorities}</dt>
        <dd>
        A list of one or more URI authorities that identify data offered by the content provider.
        Multiple authorities are listed by separating their names with a semicolon. 
        To avoid conflicts, authority names should use a Java-style naming convention 
        (such as {@code com.example.provider.cartoonprovider}).  Typically, it's the name
        of the {@link android.content.ContentProvider} subclass that implements the provider
        <p>
            There is no default.  At least one authority must be specified.
        </p>
        </dd>

        <dt><a name="enabled"></a>{@code android:enabled}</dt>
        <dd>Whether or not the content provider can be instantiated by the system &mdash; 
        "{@code true}" if it can be, and "{@code false}" if not.  The default value 
        is "{@code true}".

        <p>
The <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element has its own 
<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all 
application components, including content providers.  The 
<code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> and {@code <provider>}
attributes must both be "{@code true}" (as they both
are by default) for the content provider to be enabled.  If either is 
"{@code false}", the provider is disabled; it cannot be instantiated.
</p></dd>

<dt><a name="exported"></a>{@code android:exported}</dt>
<dd>
    Whether the content provider is available for other applications to use:
    <ul> 
        <li>
            <code>true</code>: The provider is available to other applications. Any application can
            use the provider's content URI to access it, subject to the permissions specified for
            the provider.
        </li>
        <li>
            <code>false</code>: The provider is not available to other applications. Set 
            <code>android:exported="false"</code> to limit access to the provider to your
            applications. Only applications that have the same user ID (UID) as the provider will
            have access to it.
        </li>
    </ul>
    <p>
        The default value is <code>"true"</code> for applications that set either 
<code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:minSdkVersion</a></code>
        or 
<code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:targetSdkVersion</a></code> to 
        <code>"16"</code> or lower. For applications that
        set either of these attributes to <code>"17"</code> or higher, the default is 
        <code>"false"</code>.
    </p>
    <p>
        You can set <code>android:exported="false"</code> and still limit access to your
        provider by setting permissions with the 
   <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission</a></code>
        attribute.
    </p>
</dd> 

<dt><a name="gprmsn"></a>{@code android:grantUriPermissions}</dt>
<dd>Whether or not those who ordinarily would not have permission to 
access the content provider's data can be granted permission to do so,
temporarily overcoming the restriction imposed by the
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn">readPermission</a></code>,
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn">writePermission</a></code>, and 
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission</a></code> attributes 
&mdash; 
"{@code true}" if permission can be granted, and "{@code false}" if not.  
If "{@code true}", permission can be granted to any of the content 
provider's data.  If "{@code false}", permission can be granted only 
to the data subsets listed in 
<code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">&lt;grant-uri-permission&gt;</a></code> subelements, 
if any.  The default value is "{@code false}".

<p>
Granting permission is a way of giving an application component one-time 
access to data protected by a permission.  For example, when an e-mail 
message contains an attachment, the mail application may call upon the 
appropriate viewer to open it, even though the viewer doesn't have general 
permission to look at all the content provider's data. 
</p>

<p>  
In such cases, permission is granted by 
<code>{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}</code> 
and <code>{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION}</code> 
flags in the Intent object that activates the component.  For example, the 
mail application might put {@code FLAG_GRANT_READ_URI_PERMISSION} in the 
Intent passed to {@code Context.startActivity()}.  The permission is specific 
to the URI in the Intent.  
</p>

<p>
If you enable this feature, either by setting this attribute to "{@code true}"
or by defining <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">&lt;grant-uri-permission&gt;</a></code> 
subelements, you must call 
<code>{@link android.content.Context#revokeUriPermission 
Context.revokeUriPermission()}</code> when a covered URI is deleted from 
the provider.
</p>

<p>
See also the <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">&lt;grant-uri-permission&gt;</a></code>
element.
</p></dd>

<dt><a name="icon"></a>{@code android:icon}</dt>
<dd>An icon representing the content provider. 
This attribute must be set as a reference to a drawable resource containing 
the image definition.  If it is not set, the icon specified for the application 
as a whole is used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> 
element's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#icon">icon</a></code> attribute).</dd>

<dt><a name="init"></a>{@code android:initOrder}</dt>
<dd>The order in which the content provider should be instantiated, 
relative to other content providers hosted by the same process.  
When there are dependencies among content providers, setting this 
attribute for each of them ensures that they are created in the order 
required by those dependencies.  The value is a simple integer, 
with higher numbers being initialized first.</dd>

<dt><a name="label"></a>{@code android:label}</dt>
<dd>A user-readable label for the content provided.  
If this attribute is not set, the label set for the application as a whole is 
used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element's 
<code><a href="{@docRoot}guide/topics/manifest/application-element.html#label">label</a></code> attribute).

<p>
The label should be set as a reference to a string resource, so that
it can be localized like other strings in the user interface.  
However, as a convenience while you're developing the application, 
it can also be set as a raw string.
</p></dd>

<dt><a name="multi"></a>{@code android:multiprocess}</dt>
<dd>Whether or not an instance of the content provider can be created in 
every client process &mdash; "{@code true}" if instances can run in multiple
processes, and "{@code false}" if not.  The default value is "{@code false}".

<p>
Normally, a content provider is instantiated in the process of the 
application that defined it.  However, if this flag is set to "{@code true}", 
the system can create an instance in every process where there's a client 
that wants to interact with it, thus avoiding the overhead of interprocess 
communication.
</p></dd>

<dt><a name="nm"></a>{@code android:name}</dt>
<dd>The name of the class that implements the content provider, a subclass of 
{@link android.content.ContentProvider}.  This should be a fully qualified 
class name (such as, "{@code com.example.project.TransportationProvider}").  
However, as a shorthand, if the first character of the name is a period, 
it is appended to the package name specified in the 
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a></code> element.

<p>
There is no default.  The name must be specified.
</p></dd>


<dt><a name="prmsn"></a>{@code android:permission}</dt>
<dd>The name of a permission that clients must have to read or write the
content provider's data.  This attribute is a convenient way of setting a 
single permission for both reading and writing.  However, the 
<code><a href="#rprmsn">readPermission</a></code> and 
<code><a href="#wprmsn">writePermission</a></code> attributes take precedence
over this one.  If the <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn">readPermission</a></code> 
attribute is also set, it controls access for querying the content provider.
And if the <code><a href="#wprmsn">writePermission</a></code> attribute is set,
it controls access for modifying the provider's data.

<p>
For more information on permissions, see the 
<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#sectperm">Permissions</a> 
section in the introduction and a separate document, 
<a href="{@docRoot}guide/topics/security/security.html">Security and
Permissions</a>.
</p></dd>

<dt><a name="proc"></a>{@code android:process}</dt>
<dd>The name of the process in which the content provider should run.  Normally, 
all components of an application run in the default process created for the 
application.  It has the same name as the application package.  The 
<code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element's 
<code><a href="{@docRoot}guide/topics/manifest/application-element.html#proc">process</a></code> 
attribute can set a different 
default for all components.  But each component can override the default
with its own {@code process} attribute, allowing you to spread your 
application across multiple processes.

<p>
If the name assigned to this attribute begins with a colon (':'), a new 
process, private to the application, is created when it's needed and 
the activity runs in that process.
If the process name begins with a lowercase character, the activity will run 
in a global process of that name, provided that it has permission to do so.
This allows components in different applications to share a process, reducing 
resource usage.
</p></dd>

<dt><a name="rprmsn"></a>{@code android:readPermission}</dt>
<dd>A permission that clients must have to query the content provider.  
See also the <code><a href="#prmsn">permission</a></code> and 
<code><a href="#wprmsn">writePermission</a></code> attributes.</dd>

<dt><a name="sync"></a>{@code android:syncable}</dt>
<dd>Whether or not the data under the content provider's control 
is to be synchronized with data on a server &mdash; "{@code true}" 
if it is to be synchronized, and "{@code false}" if not.</dd>

<dt><a name="wprmsn"></a>{@code android:writePermission}</dt>
<dd>A permission that clients must have to make changes to the data 
controlled by the content provider.  
See also the <code><a href="#prmsn">permission</a></code> and 
<code><a href="#rprmsn">readPermission</a></code> attributes.</dd>

</dl></dd>

<!-- ##api level indication## -->
<dt>introduced in:</dt>
<dd>API Level 1</dd>

<dt>see also:</dt>
<dd><a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a></dd>

</dl>