4

アクティビティからのすべての連絡先を表示するために ContactsContract API インテントを使用しています。このインテントは、連絡先の ID を返します。この連絡先の住所を取得する必要があります。

連絡先を表示するために使用しているコードは次のとおりです。

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

関数で結果を取得していonActivityResultます。

助けてください、どうすればいいですか。

4

4 に答える 4

10

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. 
于 2010-08-31T16:24:49.550 に答える
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));
}
于 2010-10-23T12:36:34.133 に答える
1

Kiranの答えはおそらくAndroid2.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(右?)

于 2011-02-10T15:53:09.467 に答える
1

これにより、連絡先の住所からすべての住所が返されます。

     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();
于 2012-10-13T21:58:08.700 に答える