ContentProvider与系统Contacks电话簿的结合使用

上一篇Blog写到了ContentProvider,其实很多时候我们并不需要知道ContentProvider的具体实现原理啦~大多数时候我们只是使用这个ContentProvider去实现数据的共享和访问,所以我们下面就用访问系统中电话簿并显示在ListView中这个例子来看一下怎么使用ContentProvider喽~

上代码哈~(注意我在代码里的那一条注释哇,虽然就一条注释,但是关系到能不能查询出电话号码哟~)

package com.test.phone;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

public class ContentProviderPhoneActivity extends Activity {

	private ListView myPhoneList;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		myPhoneList = new ListView(this);

		ContentResolver phoneContentResolver = this.getContentResolver();
		List<String> myList = new ArrayList<String>();
		Cursor phoneCursor = phoneContentResolver.query(
				ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
		while (phoneCursor.moveToNext()) {
			String contactId = phoneCursor.getString(phoneCursor
					.getColumnIndex(ContactsContract.Contacts._ID));
			Cursor phones = phoneContentResolver.query(
					ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
					ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
							+ contactId, null, null);
			while (phones.moveToNext()) {
				/* 这里要注意不可以直接查询所有的电话簿中的号码,而要根据联系人的ID来查去某一个人的号码,
				 * 所以这里通过一个循环来查询上面遍历到的联系人所对应的号码*/
				String phoneNumber = phones
						.getString(phones
								.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
				myList.add(phoneNumber);
				Log.i("TAG", "ID=" + ContactsContract.Contacts._ID
						+ "      Mum: " + phoneNumber);
			}
			startManagingCursor(phones);
		}
		startManagingCursor(phoneCursor);
		Adapter myAdapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, myList);
		myPhoneList.setAdapter((ListAdapter) myAdapter);
		setContentView(myPhoneList);
	}
}

当然要注意一点,我们既然要访问系统的资源,那肯定要加相应的权限啦~因此,我们在Manifest文件中加上如下的权限:

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

如果我们要往里头写数据,那还要加个写的权限,如下:

<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>

看吧看吧,其实如果仅仅只是使用ContentProvider的话并没有像实现ContentProvider那么复杂啦~

你可能感兴趣的:(android,ListView,String,null,Class,电话)