在我開發的每日短信程序中,有一個這樣的功能,就是點擊‘選擇聯系人’按鈕,會出現聯系人選擇界面,點擊選擇聯系人後,會將這個聯系人的手機號碼加入一個文本框中。關於這個程序介紹和界面可以參看:我的第一個Android程序
關於選擇聯系人,可以直接使用Android的內置聯系人實現,網上也有些例子,但是有些代碼有點問題,有的在模擬器正常,手機上不行,有的手機OK,模擬器不行。原因是在聯系人URI使用瞭硬編碼,你可以使用ContactsContract.Contacts.CONTENT_URI常量來增強移植性。
選擇聯系人部分代碼如下:
Java代碼
mChooseContactButton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
SMSSendActivity.this.startActivityForResult(intent, 1);
}
});
接下來就是獲取選擇聯系人的手機號碼,首先需要通過函數onActivityResult獲取選擇的聯系人,然後通過Content Provider查詢聯系人的手機號碼,代碼片段如下:
Java代碼
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode)
{
case (1) :
{
if (resultCode == Activity.RESULT_OK)
{
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
c.moveToFirst();
String phoneNum=this.getContactPhone(c);
mPhoneNum.setText(phoneNum);
}
break;
}
}
}
//獲取聯系人電話
private String getContactPhone(Cursor cursor)
{
int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
int phoneNum = cursor.getInt(phoneColumn);
String phoneResult="";
//System.out.print(phoneNum);
if (phoneNum > 0)
{
// 獲得聯系人的ID號
int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);
String contactId = cursor.getString(idColumn);
// 獲得聯系人的電話號碼的cursor;
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId,
null, null);
//int phoneCount = phones.getCount();
//allPhoneNum = new ArrayList<String>(phoneCount);
if (phones.moveToFirst())
{
// 遍歷所有的電話號碼
for (;!phones.isAfterLast();phones.moveToNext())
{
int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
int phone_type = phones.getInt(typeindex);
String phoneNumber = phones.getString(index);
switch(phone_type)
{
case 2:
phoneResult=phoneNumber;
break;
}
//allPhoneNum.add(phoneNumber);
}
if (!phones.isClosed())
{
phones.close();
}
}
}
return phoneResult;
}
這樣,就可以實現通過選擇聯系人來獲取它的手機號碼瞭,代碼是我從我程序代碼直接拷貝的,需要做部分修改,但是絕對可用。
作者“外行看熱鬧”