2010-09-12 3 views
1

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

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

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

Надежда кто-нибудь может помочь :)

ответ

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» в этой строке: – Christoph

+0

ursor курсор = CTX .getContentResolver(). query (uri, null, null, null, null); – Christoph

+0

ctx - это контекст – Pentium10

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)) { 
Смежные вопросы