Android Api - получить номер мобильного телефона из контактов

1

Я пробовал столько учебников и много читал здесь в SO, но я не могу решить свою проблему:

При нажатии кнопки пользователь может выбрать номер мобильного телефона. Фактически я могу получить имя выбранного контакта, но я не могу найти способ, чтобы получить/выбрать номер мобильного телефона.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    /** Layouting */
    this.mGetMobileNumberButton = (Button)findViewById(R.id.getMobileNumberButton);
    this.mNameTextView = (TextView)findViewById(R.id.nameTextView);
    this.mMobileNumberTextView = (TextView)findViewById(R.id.mobileNumberTextView);


    /** onClick getContactInfos*/
   this.mGetMobileNumberButton.setOnClickListener(new OnClickListener() {
      public void onClick(View v){ 
          Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
          startActivityForResult(intent, 1);        
      } 
    });
}

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        Uri contactData = data.getData();
        Cursor c = managedQuery(contactData, null, null, null, null);
        if (c.moveToFirst()) {
            String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
            mNameTextView.setText(name);
        }
    }
}

Надеюсь, что кто-то может помочь:)

Теги:
contacts

2 ответа

4
Лучший ответ

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

    Uri uri = data.getData();
Cursor cursor=ctx.getContentResolver().query(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 have the 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(); 
   } 
 }
  • 0
    спасибо за ваш ответ, но я не знаю, что делать с "ctx" в этой строке:
  • 0
    ursor cursor = ctx.getContentResolver (). query (uri, null, null, null, null);
Показать ещё 6 комментариев
2

Разве только когда вы получаете весь контакт с телефона, и после этого вы проверяете результат один на один, если он имеет номер или нет. Вы можете установить условие в функцию query.

Uri uri = data.getData();
Cursor cursor=ctx.getContentResolver().query(uri, null, ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1", null, null);

Остальная часть кода будет такой же без этого теста:

   String hasPhone = cursor.getString(cursor.getColumnIndex( 
     ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
   if (Boolean.parseBoolean(hasPhone)) {

Ещё вопросы

Сообщество Overcoder
Наверх
Меню