<provider android:authorities="list" android:enabled=["true" | "false"] android:exported=["true" | "false"] android:grantUriPermissions=["true" | "false"] android:icon="drawable resource" android:initOrder="integer" android:label="string resource" android:multiprocess=["true" | "false"] android:name="string" android:permission="string" android:process="string" android:readPermission="string" android:syncable=["true" | "false"] android:writePermission="string" > . . . </provider>
ContentProviderthat supplies structured access to data managed by the application. All content providers in your application must be defined in a
<provider>element in the manifest file; otherwise, the system is unaware of them and doesn't run them.
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.
The Android system stores references to content providers according to an authority
string, part of the provider's content URI. For example, suppose you want to
access a content provider that stores information about health care professionals. To do
this, you call the method
ContentResolver.query(), which among other
arguments takes a URI that identifies the provider:
content: scheme identifies the URI as a content URI pointing to
an Android content provider. The authority
com.example.project.healthcareprovider identifies the provider itself; the
Android system looks up the authority in its list of known providers and their authorities.
nurses/rn is a path, which the content provider can use
to identify subsets of the provider data.
Notice that when you define your provider in the
<provider> element, you
don't include the scheme or the path in the
android:name argument, only the
For information on using and developing content providers, see the API Guide, Content Providers.
com.example.provider.cartoonprovider). Typically, it's the name of the
ContentProvidersubclass that implements the provider
There is no default. At least one authority must be specified.
true" if it can be, and "
false" if not. The default value is "
<application> element has its own
enabled attribute that applies to all
application components, including content providers. The
attributes must both be "
true" (as they both
are by default) for the content provider to be enabled. If either is
false", the provider is disabled; it cannot be instantiated.
true: 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.
false: The provider is not available to other applications. Set
android:exported="false"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.
The default value is
"true" for applications that set either
"16" or lower. For applications that
set either of these attributes to
"17" or higher, the default is
You can set
android:exported="false" and still limit access to your
provider by setting permissions with the
permissionattributes — "
true" if permission can be granted, and "
false" if not. If "
true", permission can be granted to any of the content provider's data. If "
false", permission can be granted only to the data subsets listed in
<grant-uri-permission>subelements, if any. The default value is "
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.
In such cases, permission is granted by
flags in the Intent object that activates the component. For example, the
mail application might put
FLAG_GRANT_READ_URI_PERMISSION in the
Intent passed to
Context.startActivity(). The permission is specific
to the URI in the Intent.
If you enable this feature, either by setting this attribute to "
or by defining
subelements, you must call
when a covered URI is deleted from
See also the
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.
true" if instances can run in multiple processes, and "
false" if not. The default value is "
Normally, a content provider is instantiated in the process of the
application that defined it. However, if this flag is set to "
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
ContentProvider. This should be a fully qualified class name (such as, "
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
There is no default. The name must be specified.
writePermissionattributes take precedence over this one. If the
readPermissionattribute is also set, it controls access for querying the content provider. And if the
writePermissionattribute is set, it controls access for modifying the provider's data.
processattribute can set a different default for all components. But each component can override the default with its own
processattribute, allowing you to spread your application across multiple processes.
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.
true" if it is to be synchronized, and "
false" if not.