public class FragmentMain extends Fragment implements LoaderManager.LoaderCallbacks{
ArrayList mFriends = new ArrayList();
...
}
Now we need to setup our createLoader method to get the data and onLoadFinished to put the data into the UI. The selection here is very important as it limits the query to the visible contacts:
String my_selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";.
Next step is very simple, in the onLoadFinished we loop through the available data, adding each email address to an ArrayList.
@Override
public Loader onCreateLoader(int arg0, Bundle arg1) {
//Sort by email address no case
final String my_sort_order = ContactsContract.CommonDataKinds.Email.DATA + " COLLATE NOCASE ASC";
String my_selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
String[] eproj = new String[]{
ContactsContract.Contacts._ID,
ContactsContract.CommonDataKinds.Email.DATA};
Uri uri = android.provider.ContactsContract.CommonDataKinds.Email.CONTENT_URI;
//Query all emails in contacts
return new CursorLoader(getActivity(), uri, eproj, my_selection, null, my_sort_order);
}
@Override
public void onLoadFinished(Loader arg0, Cursor data) {
if (data != null && data.moveToFirst()) {
//Loop through cursor
while (!data.isAfterLast()) {
//get Email address
String myemail = data.getString(data.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
if(!mFriends.contains(myemail)){
//Add email to arrayList
mFriends.add(myemail);
}
data.moveToNext();
}
}
//load friends into ui
loadFriends();
}
@Override
public void onLoaderReset(Loader arg0) {
//Not Used
}
Last but not least we load the data into our listview. Now you can of course, should you desire, create a custom Adapter and implement your own item view, but that's a blog post for another day.
private void loadFriends(){
//load arraylist into adapter.
ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, mFriends);
mFriendsList.setAdapter(adapter);
}
Oh and one more thing, don't forget your permissions :)
<uses-permission android:name="android.permission.READ_CONTACTS" />