0% found this document useful (0 votes)
74 views19 pages

Android - Content Providers: L. Grewe

The document discusses content providers in Android, which allow applications to share data through a common interface and URI scheme. Content providers map data to URIs and make it available to other apps, and Android has several built-in content providers like Contacts and MediaStore that can be accessed. The document provides examples of how to use a CursorLoader to asynchronously load data from a content provider into a Cursor and display it using a SimpleCursorAdapter.

Uploaded by

Ijaz Hassan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
74 views19 pages

Android - Content Providers: L. Grewe

The document discusses content providers in Android, which allow applications to share data through a common interface and URI scheme. Content providers map data to URIs and make it available to other apps, and Android has several built-in content providers like Contacts and MediaStore that can be accessed. The document provides examples of how to use a CursorLoader to asynchronously load data from a content provider into a Cursor and display it using a SimpleCursorAdapter.

Uploaded by

Ijaz Hassan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 19

ANDROID – CONTENT

PROVIDERS

L. Grewe
Content Provider
 A content provider makes a specific set of the application's
data available to other applications.

 If you don't need to share data amongst multiple applications


you can use a database directly via SQLiteDatabase.
Built-in Content Providers
 Contacts
 MediaStore.Audio
 MediaStore.Images
 MediaStore.Video
 Browser
 CallLog
 Settings
Basic Idea – URI format
 Data mapped to a URI (CONTENT_URI)
 URI is used to access data by client

<standard_prefix>://<authority>/<data_path>/<id>

examples:
content://media/internal/images = list of all internal images on device
content://media/external/images = list of all external images on device
content://call_log/calls = list of all calls in Call Log
content://browser/bookmarks = list of bookmarks
Basic Idea – example for Contacts
Content Provider
 Data mapped to a URI (CONTENT_URI)
 URI is used to access data by client
 content://contacts/people/
 Allcontact names
 content://contacts/people/23
 Contact with _ID = 23
CONTENT_URI
 Content URI can be complex
 Rather than hardcoding exact URI everywhere
 Content Providers expose the base URI as static
field NameProvider.CONTENT_URI

public static final String AUTHORITY = “packagename.NameProvider";

public static final Uri CONTENT_URI = Uri.parse("content://"


+ AUTHORITY + "/names");
Option 1: Accessing data with a Content
Provider using CursorLoader
CursorLoader cursor Loader = new CursorLoader(Context context, Uri uri,
String[ ] projection,String selection, String[ ] selectionArgs, String sortOrder)

OPTION 1:

This is for Honeycomb


Or Later version of Android
 context = associated context
 uri = Content Provider URI
 projection =which columns to return
 selection = SQL Where clause with "WHERE"
 selectionArgs =Arguments for selection
 sortOrder = SQL ORDER BY clause
Option1: Example Accessing Content Provider
data with CursorLoader
This example:
import android.content.CursorLoader;
we ask for all contacts
// INSIDE Activity Class ******** Loads in background –does NOT
block application UI
@Override
public void onCreate(Bundle savedInstances) {
//*** other code*****
Uri allContacts = Uri.parse(“content://contacts/people”);
CursorLoader cursorLoader = new CursorLoader( this,
allContacts, //URI of content provider
null, //means return all columns
null, // WHERE clause-- won't specify.
null, // no where clause, so no arguments
null); //no order by specified
//get data from Content Provider, populates Cursor c with result set
Cursor c = cursorLoader.loadInBackground(); //LOADS in background, no blocking
Option1: Example Accessing Content Provider
data with CursorLoader
This example:

import android.widget.SimpleCursorAdapter; display results using a


import android.database.Cursor; SimpleCursorAdapter
import android.widget.CursorAdapter;
import android.provider.ContactsContract; //built in contacts content provider info
CursorAdapter.FLAG_REGIST
ER_CONTENT_OBSERVER
// INSIDE Activity Class ******** Means this adapter
registered to be informed
@Override when change in content
public void onCreate(Bundle savedInstances) { provider

//*** other code SEE PREVIOUS SLIDE***** results in c (Cursor instance)


//info will display from ContentProvider results in Cursor c
String[] columns = new String[] {ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts._ID};
int[] views = new int[] {R.id.contactName, R.id.contactID};
adapter = new SimpleCursorAdapter(this, R.layout.main, c, columns, views
Option1: Example ---- what is
SimpleCursorAdapter

 An Adapter used to represent Cursor (data result set)


 Used to populate a related View  example ….
android.app.ListActivity as one possibility

ListActivityInstance.setListAdapter(SimpleCursorAdapter_Instance)

public SimpleCursorAdapter (Context context, int layout, Cursor c, String[]


from, int[] to, int flags)
 context = context where the ListView associated with this
 layout = resource identifier of a layout file that defines the views for this list item. The layout file should
include at least those named views defined in "to"
 c = database cursor.
 from =list of column names representing the data to bind to the UI. Can be null if the cursor is not available
yet.
 to = views that should display column in the "from" parameter. These should all be TextViews. The first N
views in this list are given the values of the first N columns in the from parameter.
 flags = Flags used to determine the behavior of the adapter, as per CursorAdapter(Context, Cursor, int).
Example

 Main.xml ---interface for app’s main Activity (a


ListActivity) <TextView
<?xml version="1.0" encoding="utf-8"?>
android:id="@+id/contactName"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:textStyle="bold"
android:layout_width="fill_parent"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_height="wrap_content" />
android:orientation="vertical" >

<TextView
<ListView
android:id="@+id/contactID"
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:layout_weight="1"
android:stackFromBottom="false"
</LinearLayout>
android:transcriptMode="normal" />
Example --- main Activity Class
public class ProviderActivity extends ListActivity { c = cursorLoader.loadInBackground();
/** Called when the activity is first created. */
@Override String[] columns = new String[] {
public void onCreate(Bundle savedInstanceState) { ContactsContract.Contacts.DISPLAY_NAME,
super.onCreate(savedInstanceState); ContactsContract.Contacts._ID};
setContentView(R.layout.main);
Uri allContacts = ContactsContract.Contacts.CONTENT_URI; int[] views = new int[] {R.id.contactName, R.id.contactID};
String[] projection = new String[]
{ContactsContract.Contacts._ID, SimpleCursorAdapter adapter;
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER}; adapter = new SimpleCursorAdapter( this, R.layout.main,
c, columns, views,
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
Cursor c;
CursorLoader cursorLoader = new CursorLoader( this,
this.setListAdapter(adapter);
allContacts, projection,
ContactsContract.Contacts.DISPLAY_NAME + "
PrintContacts(c);
LIKE ?“, new String[] {"%Lee"},
}
ContactsContract.Contacts.DISPLAY_NAME + "
ASC");
Example --- main Activity Class
continued
private void PrintContacts(Cursor c)
{
if (c.moveToFirst()) {
do{
<<< UTILITY Method to print
String contactID = c.getString(c.getColumnIndex( out the result set returned in
ContactsContract.Contacts._ID));
String contactDisplayName = the Cursor instance c that
c.getString(c.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME));
contains all the Contacts.
Log.v("Content Providers", contactID + ", " +
contactDisplayName);
} while (c.moveToNext());
}
}

}
Example ---some explanation
 Predefined Query String Constants
Uri allContacts = ContactsContract.Contacts.CONTENT_URI
SAME AS
Uri allContacts = Uri.parse(“content://contacts/people”);
Example ---some explanation
 Following is like saying give me all the contacts with the columns ID,
DISPLAY_NAME and HAS_PHONE_NUMBER where the
DISPLAY_NAME is Like Lee and orderby DISPLAY_NAME in
Ascending order (ASC)

String[] projection = new String[]


{ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER};

Cursor c;
CursorLoader cursorLoader = new CursorLoader( this,
allContacts, projection,
ContactsContract.Contacts.DISPLAY_NAME + " LIKE ?“, new String[]
{"%Lee"},
ContactsContract.Contacts.DISPLAY_NAME + " ASC");
Predefined Query Strings
 Predefined Query String Constants
Uri allContacts = ContactsContract.Contacts.CONTENT_URI
SAME AS
Uri allContacts = Uri.parse(“content://contacts/people”);

 Other examples
 Browser.BOOKMARKS_URI
 Browser.SEARCHES_URI
 CallLog.CONTENT_URI
 MediaStore.Images.Media.INTERNAL_CONTENT_URI
 MediaStore.Images.Media.EXPERNAL_CONTENT_URI
 Settings.CONTENT_URI
Another option to query Content
Provider
Older method
Option 2: Example with
managedQuery(*)
Android.net.Uri allContacts;
allContacts = Uri.parse(“content://contacts/people”);

Cursor c = managedQuery(allContacts, null,null,null,null); //gets all contacts

OPTION 2:
OPTION 2:
ONLY FOR HISTORIC
This is for prior to Honeycomb
NEEDS!!!!!
Version of Android
Option 2: Accessing data with a Content
Provider using manaedQuery(*)
public final Cursor managedQuery(Uri uri, String[] projection,String selection,
String[] selectionArgs, String sortOrder)

OPTION 2:

This is for prior to Honeycomb


 uri = Content Provider URI Version of Android
 projection =which columns to return
 selection = SQL Where clause with "WHERE"
 selectionArgs =Arguments for selection
 sortOrder = SQL ORDER BY clause

You might also like