BACKGROUND
I am reading this tutorial on Android Content Providers. I understand from this tutorial that,
In order for other applications to access a Content Provider's data, the provider application must specify the permissions which the client applications need to have to access the its provider's data.
Client applications specify the permissions they require in their manifest file using the <uses-permission>
element, e.g.
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" > <!-- In the client app's manifest -->
Then the APK manager asks the user's consent on these permissions (in the client app) when the user is installing the client application.
QUESTION
My question is that how does the provider (app) specify the permissions that other client apps must be granted in order for them to access the provider's data?
From the developer guide,
To find the exact name of the read access permission for the provider you're using, as well as the names for other access permissions used by the provider, look in the provider's documentation.
So is that the way to specify those permissions in the provider app - in the provider's documentation? If so, where is that documentation found? Where can I find that documentation for the SearchableDictionary provider (used as an example in the tutorial), and if I write a Content Provider in my app, where shall I provide that documentation?
Accessing a provider When you want to access data in a content provider, you use the ContentResolver object in your application's Context to communicate with the provider as a client. The ContentResolver object communicates with the provider object, an instance of a class that implements ContentProvider .
To access the content, define a content provider URI address. Create a database to store the application data. Implement the six abstract methods of ContentProvider class. Register the content provider in AndroidManifest.
A content provider component supplies data from one application to others on request. Such requests are handled by the methods of the ContentResolver class. A content provider can use different ways to store its data and the data can be stored in a database, in files, or even over a network.
Content providers can help an application manage access to data stored by itself, stored by other apps, and provide a way to share data with other apps. They encapsulate the data, and provide mechanisms for defining data security.
Define Permission in provider app's AndroidManifest.xml
<permission
android:name="com.myapp.PERMISSION"/>
Define Provider in provider app's AndroidManifest.xml
<provider
android:name=".MyProvider"
android:authorities="com.myapp.MyProvider.AUTHORITY"
android:enabled="true"
android:exported="true"
android:multiprocess="true"
android:readPermission="com.myapp.PERMISSION" />
Client's AndroidManifest.xml should have uses-permission tag
<uses-permission android:name="com.myapp.PERMISSION"/>
Then client can access the provider
Cursor cursor = getContentResolver().query(
Uri.parse("content://com.myapp.MyProvider.AUTHORITY/xxx" ),null, null, null, null);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With