一、显示界面:contact.xml。用来显示全部联系人信息
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg"
android:orientation="vertical" >
<ListView
android:id="@+id/contactsList"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
二、Android代码片:Contacts.java。
// 联系人数据,只保存姓名和联系方式
class Person
{
private String name = null; // 姓名
private String number = null; // 联系方式
public void setName(String name)
{
this.name = name;
}
public void setNumber(String number)
{
this.number = number;
}
public String getName()
{
return this.name;
}
public String getNumber()
{
return this.number;
}
}
// 在ListView中显示的控件,姓名和联系方式
class ViewHolder
{
TextView nameText;
TextView numText;
}
/********************
* 对中文进行排序
*******************/
class SortChineseName implements Comparator
{
private Collator cmp = Collator.getInstance(java.util.Locale.CHINA);
@Override
public int compare(Person p1, Person p2)
{
int result = 0;
if(cmp.compare(p1.getName(), p2.getName()) > 0)
result = 1;
else if(cmp.compare(p1.getName(), p2.getName()) < 0)
result = -1;
return result;
}
}
/**************************
* 读取手机中的联系人信息,保存在List中
*************************/
class PhoneNumUtil
{
private static PhoneNumUtil instance = null; // 使用单例模式
private List
contactsList = null;
private PhoneNumUtil()
{
contactsList = new ArrayList
();
}
public static PhoneNumUtil getInstance()
{
if(instance == null)
instance = new PhoneNumUtil();
return instance;
}
public List
getContacts(Context context)
{
try
{
ContentResolver cr = context.getContentResolver();// 得到ContentResolver对象
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
Cursor phones = null;
while(cursor.moveToNext())
{
Person entity = new Person();
String ContactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));// 获取联系人ID
entity.setName(cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)));// 取得联系人名字
phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
while(phones.moveToNext())
{
String PhoneNumber = phones.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
entity.setNumber(PhoneNumber);
}
contactsList.add(entity);// 把信息放入list
}
// 对读取的联系人进行拼音排序
Collections.sort(contactsList, new SortChineseName());
phones.close();
cursor.close();
return contactsList;
} catch(Exception e)
{
e.printStackTrace();
return null;
}
}
}
/****************
* 主类
***************/
public class Contacts extends Activity implements OnItemClickListener
{
private List
list = null; // 联系人信息表 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pick_contact); ListView contactsListView = (ListView) findViewById(R.id.contactsList); PhoneNumUtil phoneNumUtil = PhoneNumUtil.getInstance(); // 得到联系人列表 list = phoneNumUtil.getContacts(this); ContactsAdapter adapter = new ContactsAdapter(this, list); contactsListView.setAdapter(adapter); contactsListView.setOnItemClickListener(this);// 为列表添加响应事件 } @Override public void onItemClick(AdapterView
parent, View view, int position, long id) { Intent intent = new Intent(this, AddActivity.class); intent.putExtra("phoneNumber", list.get(position).getNumber());// 把电话号码传给AddActivity setResult(RESULT_OK, intent); finish(); } } /**************** * ListView适配器 ***************/ class ContactsAdapter extends BaseAdapter { private List
list = null; // 联系人信息表 private LayoutInflater inflater = null; private Context context = null; ContactsAdapter(Context context, List
persons) { this.context = context; this.list = persons; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(inflater == null) inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewHolder viewHolder; if(convertView == null) { convertView = inflater.inflate(R.layout.contacts_list, null); viewHolder = new ViewHolder(); viewHolder.nameText = (TextView) convertView.findViewById(R.id.contactName); viewHolder.numText = (TextView) convertView.findViewById(R.id.contactNumber); convertView.setTag(viewHolder); } else viewHolder = (ViewHolder) convertView.getTag(); viewHolder.nameText.setText(list.get(position).getName()); viewHolder.numText.setText(list.get(position).getNumber()); return convertView; } }