2010-08-31 63 views
2

我正在使用ContactsContract API來顯示活動中的所有聯繫人。這個意圖返回聯繫人的ID。我需要得到這個聯繫人的郵政地址。在Android上使用ContactsContract API獲取聯繫人的郵政地址

這裏是我使用的用於顯示聯繫人代碼:

Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); startActivityForResult(intent, PICK_CONTACT);

我得到的結果在onActivityResult功能。

請幫忙,我該怎麼做。

回答

8
在onActivityResult

,首先要使接觸ID和查詢ContactsContract.Data的相關數據:

// get the contact ID 

Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null); 
cursor.moveToFirst(); 
long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
cursor.close(); 

// get the data package containg the postal information for the contact 
cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, 
    new String[]{ StructuredPostal.STREET, 
     StructuredPostal.CITY, 
// add more coluns from StructuredPostal if you need them 
     StructuredPostal.POSTCODE}, 
     ContactsContract.Data.CONTACT_ID + "=? AND " + 
      StructuredPostal.MIMETYPE + "=?", 
     new String[]{String.valueOf(id), StructuredPostal.CONTENT_ITEM_TYPE}, 
     null); 


Street = cursor.getString(cursor.getColumnIndex(StructuredPostal.STREET)); 
Postcode = cursor.getString(cursor.getColumnIndex(StructuredPostal.POSTCODE)); 
City = cursor.getString(cursor.getColumnIndex(StructuredPostal.CITY))); 
// etc. 
2

可以做這樣太(小較少代碼)

發送此意向方法:

Intent intent = new Intent(Intent.ACTION_PICK); 

intent.setType(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_TYPE);startActivityForResult(intent, PICK_CONTACT);

在onActivityResult方法

Uri contactData = data.getData(); 
Cursor c = managedQuery(contactData, null, null, null, null); 
if (c.moveToFirst()) { 
    String address = c.getString(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)); 
} 
1

Kiran的答案很可能工作正常,爲Android 2.0及以上,但是當你希望它是爲Android 1.6及以下兼容,你需要適應一下代碼:

Intent intent = new Intent(Intent.ACTION_PICK); 
intent.setType(Contacts.ContactMethods.CONTENT_POSTAL_TYPE); 
startActivityForResult(intent, PICK_CONTACT); 

而且在onActivtyResult方法:

Uri contactData = data.getData(); 
Cursor c = managedQuery(contactData, null, null, null, null); 
if (c.moveToFirst()) { 
    String address = c.getString(c.getColumnIndexOrThrow(Contacts.ContactMethodsColumns.DATA)); 
} 

哪裏PICK_CONTACT是你自己選擇的int。 (對吧?)

0

這將返回聯繫郵政地址的所有地址。

 Uri uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI; 
    String sortOrder = StructuredPostal.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
     Cursor cr = getContentResolver().query(uri,null, null, null, sortOrder); 
     while(cr.moveToNext()) 
{ 
    String Street = cr.getString(cr.getColumnIndex(StructuredPostal.STREET)); 
    String Postcode = cr.getString(cr.getColumnIndex(StructuredPostal.POSTCODE)); 
    String City = cr.getString(cr.getColumnIndex(StructuredPostal.CITY)); 
    Toast.makeText(this,"Address is : " +City+","+Street ,Toast.LENGTH_SHORT).show(); 
     } 
     cr.close(); 
相關問題