page.title=&lt;provider&gt;
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 &lt;provider&gt;} 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 &lt;provider&gt;} 
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>
