前面已经介绍过用ContentProvider读取手机内的音频文件,今天学习下读取联系人信息.为了简便,我想以后所有演示程序信息都用System.out.println输出,不会显示在手机屏幕上,需要到Eclipse的Logcat里查看.其实读取联系人跟读取音频\视频之类的信息没有什么区别,无非表不同 字段不同.需要android.permission.READ_CONTACTS权限
package com.hello;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.MediaStore;
import android.provider.ContactsContract.PhoneLookup;
public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ContentResolver cr = getContentResolver();
Uri URI = ContactsContract.Contacts.CONTENT_URI;
String[] columns = new String[] {ContactsContract.Contacts._ID,PhoneLookup.DISPLAY_NAME};
//查询联系人ID和联系人名称两列
Cursor cursor = cr.query(URI, columns, PhoneLookup.HAS_PHONE_NUMBER+"=1", null, null);
//限定只返回有号码的联系人
while(cursor.moveToNext()){
String phoneNum="";
Cursor cursor2=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+cursor.getLong(0), null, null);
//因为号码与联系人不存在一个表中,一个联系人可能存在多个号码,所以根据联系人ID查找号码,存在phoneNum中
while(cursor2.moveToNext()){
phoneNum+=cursor2.getString(0)+" ";
//循环把该联系的所属的号码加进phoneNum
}
cursor2.close();
System.out.println(cursor.getLong(0)+":"+cursor.getString(1)+phoneNum);
//循环输出ID,名称,号码
}
cursor.close();
}
}