在 Android 上使用 ContactsContract api 获取联系人的邮政地址

发布于 2024-09-16 20:47:16 字数 333 浏览 4 评论 0原文

我正在使用 ContactsContract api 意图来显示活动中的所有联系人。此意图返回联系人的 ID。我需要获取该联系人的邮政地址。

这是我用来显示联系人的代码:

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

我在 onActivityResult 函数中获取结果。

请帮忙,我该怎么做。

I am using ContactsContract api intent for showing all contacts from an activity. This intent returns an id of the contact. I need to get the postal address of this contact.

Here is the code which i am using for showing contacts:


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

I am getting the result in the onActivityResult function.

Please help, how do i do this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

最单纯的乌龟 2024-09-23 20:47:16

在 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. 

in your onActivityResult, first get the contact ID and query the ContactsContract.Data for the relevant 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. 
二智少女猫性小仙女 2024-09-23 20:47:16

也可以通过这种方式完成(代码较少)以

这种方式发送 Intent:

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));
}

Can be done this way too (little lesser code)

Send the Intent this way:

Intent intent = new Intent(Intent.ACTION_PICK);

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

In the onActivityResult method

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));
}
北凤男飞 2024-09-23 20:47:16

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 是 < code>int 你自己选择的。 (正确的?)

Kiran's answer probably works fine for Android 2.0 and above, but when you want it to be compatible for Android 1.6 and below you need to adapt the code a bit:

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

And in onActivtyResult method:

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

Where PICK_CONTACT is a int of your own choice. (Right?)

看春风乍起 2024-09-23 20:47:16

这将返回联系人邮政地址中的所有地址。

     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();

This will return all the addresses from the contact Postal Address.

     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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文