Как считать контакты на Android 2.0

Вы посмотрели на средства управления, которым предоставляют AjaxToolKit? Я использовал MaskedEditExtender и ValidatorCalloutExtender и был очень доволен результатами.

@Dale - благодарит исправить меня на который! Не знал об этом (только что начал использовать инструментарий на прошлой неделе). Игнорируйте мое предложение:)

95
задан Beryllium 11 October 2013 в 19:21
поделиться

2 ответа

Во-первых, убедитесь, что вы добавили

<uses-permission android:name="android.permission.READ_CONTACTS"/>

в свой файл AndroidManifest.xml, затем вы можете прокручивать контакты телефона следующим образом:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
while (cursor.moveToNext()) { 
   String contactId = cursor.getString(cursor.getColumnIndex( 
   ContactsContract.Contacts._ID)); 
   String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
   if (Boolean.parseBoolean(hasPhone)) { 
      // You know it has a number so now query it like this
      Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
      while (phones.moveToNext()) { 
         String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));                 
      } 
      phones.close(); 
   }

   Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); 
   while (emails.moveToNext()) { 
      // This would allow you get several email addresses 
      String emailAddress = emails.getString( 
      emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
   } 
   emails.close();
}
cursor.close(); 

Кроме того, вы можете прокручивать свои контакты и просто получите имя и номер телефона следующим образом:

Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

while(people.moveToNext()) {
   int nameFieldColumnIndex = people.getColumnIndex(PhoneLookup.DISPLAY_NAME);
   String contact = people.getString(nameFieldColumnIndex);
   int numberFieldColumnIndex = people.getColumnIndex(PhoneLookup.NUMBER);
   String number = people.getString(numberFieldColumnIndex);
}

people.close();

Кроме того, если вам нужно получить такие вещи, как заметки от контакта, вам нужно будет использовать другой URI, например следующий (не стесняйтесь использовать этот метод):

private String getNote(long contactId) { 
   String note = null; 
   String[] columns = new String[] { ContactsContract.CommonDataKinds.Note.NOTE }; 
   String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
   String[] whereParameters = new String[]{Long.toString(contactId), ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE}; 
   Cursor contacts = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, where, whereParameters, null); 
   if (contacts.moveToFirst()) { 
      rv = contacts.getString(0); 
   } 
   contacts.close(); 
   return note; 
} 

Обратите внимание, на этот раз я использовал для запроса не только идентификатор контакта, но и тип MIME.

160
ответ дан 24 November 2019 в 05:47
поделиться

Эта часть не сработает для меня:

 while (phones.moveToNext()) { 
     String phoneNumber = phones.getString( 
       phones.getColumnIndex( 
         ContactsContract.CommonDataKinds.Phone.NUMBER));                 
    } 

Если я воспользуюсь ею, она работает:

 while (phones.moveToNext()) { 
                                  String pdata = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
                                  Log.v("DATA",pdata);
}
3
ответ дан 24 November 2019 в 05:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: