0%

使用ContentProvider读取联系人信息(名称 号码)

前面已经介绍过用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();
    }
 
}