通过网上学习,加以自己的改进,得到本文代码
(注意要在 工程的 AndroidManifest.xml文件中添加如下调用允许代码:
<uses-permission
android:name="android.permission.READ_CONTACTS" />)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zhangsir.getcontacts"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="5"
android:targetSdkVersion="18" />
<uses-permission
android:name="android.permission.READ_CONTACTS" />
<application>
主代码:
package com.zhangsir.getcontacts;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.util.Log;
import android.widget.ScrollView;
import android.widget.TextView;
public class ContactsActivity extends Activity {
private static final String TAG="ContactsActivity";
private TextView phone_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreateing....");
phone_view=new TextView(this);
//使用StringBuilder最后只需调用toString()就可以了,可以减少分配内存的次数,提高效率,
StringBuilder strBuilder=new StringBuilder();
//获取ContentResolver
ContentResolver cr=getContentResolver();
Log.i(TAG,"Got ContentResolver");
//获取联系人索引
Cursor cursor=cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
Log.i(TAG,"Got the Cursor");
int i=0; //用于调试时记录联系人个数
while(cursor.moveToNext()){
Log.d(TAG,"cursor.moveToNext() times:"+(++i));
int nameIndex=cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact=cursor.getString(nameIndex);
strBuilder.append(contact);
strBuilder.append(":");
strBuilder.append("\n"); //StringBuilder的好处就在于次,每次只需分配一次内存,减少分配内存的次数
//取得联系人的ID索引值
String contactId=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor phones=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactId, null, null);
//一个人可能有好几个电话号码
int j=0; //用于调试时记录同一个人的电话号码个数
while(phones.moveToNext()){
Log.i(TAG,"phones.moveToNext() times: "+(++j));
String strPhoneNumber=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
strBuilder.append("\t");
strBuilder.append(strPhoneNumber);
strBuilder.append("\n");
}
phones.close();
}
cursor.close();
phone_view.setText(strBuilder.toString());
ScrollView sv=new ScrollView(this); //如果联系人太多,一屏显示不完,所以要用ScrollView
sv.addView(phone_view);
// setContentView(con_view); //如果启用这句,这只能显示一屏的人数
setContentView(sv);
}
}