2010-08-31 2 views
2

Я использую ContactsContract api для отображения всех контактов из активности. Это намерение возвращает идентификатор контакта. Мне нужно получить почтовый адрес этого контакта.Получите почтовый адрес от контакта, используя ContactsContract api on android

Вот код, который я использую для отображения контактов:

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

Я получаю результат в функции onActivityResult.

Пожалуйста, помогите, как мне это сделать.

ответ

8

в вашем onActivityResult, сначала получить идентификатор контакта и запрос 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

ответ Киран, вероятно, работает отлично для 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();