2012-06-27 19 views
22

telefon numarasını Kodum aşağıdaki gibidir:Kişilerin nasıl alınır Android

String[] columns = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER}; 
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, columns, null, null, null); 

int ColumeIndex_ID = cursor.getColumnIndex(ContactsContract.Contacts._ID); 
int ColumeIndex_DISPLAY_NAME = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); 
int ColumeIndex_HAS_PHONE_NUMBER = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER); 

while(cursor.moveToNext()) 
{ 
    String id = cursor.getString(ColumeIndex_ID); 
    String name = cursor.getString(ColumeIndex_DISPLAY_NAME); 
    String has_phone = cursor.getString(ColumeIndex_HAS_PHONE_NUMBER); 

    if(!has_phone.endsWith("0")) 
    { 
     System.out.println(name); 
     GetPhoneNumber(id); 
    }   
} 

cursor.close(); 


public String GetPhoneNumber(String id) 
{ 
    String number = ""; 
    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone._ID + " = " + id, null, null); 

    if(phones.getCount() > 0) 
    { 
     while(phones.moveToNext()) 
     { 
      number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     } 
     System.out.println(number); 
    } 

    phones.close(); 

    return number; 
} 

Ben Kişilerin olsun adı başarısını, ancak telefon numarası GetPhoneNumber() başarısız olsun.
phones.getCount() her zaman 0'a eşittir.
Nasıl değiştirebilirim?

+0

zaman uyumsuz bir 'CursorLoader' kullanarak sorguları gerçekleştirmelidir. –

+0

Kişileri almak için basit bir kütüphane alın. [Github proje kaynağı ve örnek burada] (https://github.com/nitiwari-dev/android-contact-extractor) – nitesh

cevap

56

Android İletişim API 2,0

// 
// Find contact based on name. 
// 
ContentResolver cr = getContentResolver(); 
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
    "DISPLAY_NAME = '" + NAME + "'", null, null); 
if (cursor.moveToFirst()) { 
    String contactId = 
     cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
    // 
    // Get all phone numbers. 
    // 
    Cursor phones = cr.query(Phone.CONTENT_URI, null, 
     Phone.CONTACT_ID + " = " + contactId, null, null); 
    while (phones.moveToNext()) { 
     String number = phones.getString(phones.getColumnIndex(Phone.NUMBER)); 
     int type = phones.getInt(phones.getColumnIndex(Phone.TYPE)); 
     switch (type) { 
      case Phone.TYPE_HOME: 
       // do something with the Home number here... 
       break; 
      case Phone.TYPE_MOBILE: 
       // do something with the Mobile number here... 
       break; 
      case Phone.TYPE_WORK: 
       // do something with the Work number here... 
       break; 
     } 
    } 
    phones.close(); 
} 
cursor.close(); 

için daha fazla bilgi için bu link

+0

İmleç imleci = getContentResolver(). Query (ContactsContract.Contacts.CONTENT_URI, sütunlar, null, null, null); çalışma zamanı hatasına neden olur. Eğer yardımcı olabilirseniz .. –

+0

FYI, muhtemelen kişilerle çalışmak için gördüğüm en iyi cevap. –

+0

Cursor phones = cr.query (Phone.CONTENT_URI, null, Phone._ID + "=" + contactId, null, null); Benim için çalışıyor –

7

bu deneyin bakın. İletişim Seçici Sonra

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 

,

@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) { 
super.onActivityResult(reqCode, resultCode, data); 

switch (reqCode) { 
case (PICK_CONTACT) : 
    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(People.NAME)); 
    // TODO Whatever you want to do with the selected contact name. 
    } 
} 
break; 
} 
} 
+5

bunu nasıl yaklaşık 500 kişi için 30 saniye gibi sürdürebilirim; Yaklaşık yarım saniye süren K_Anas cevabının aksine. Bunu kullanarak tavsiye etmem. en azından benim için çalışmadı – FilipLuch

2

Sen gibi iznine gerek cevabı burada takip edin.

private static final String[] PROJECTION ={ 
     ContactsContract.Contacts._ID, 
     ContactsContract.CommonDataKinds.Phone.NUMBER, 
     ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, 
     ContactsContract.Contacts.PHOTO_THUMBNAIL_URI, 
     ContactsContract.Contacts.LOOKUP_KEY, 
}; 

new CursorLoader(
     this, 
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
     PROJECTION, 
     null, 
     null,//mSelectionArgs, 
     ContactsContract.Contacts.DISPLAY_NAME_PRIMARY 
); 

Kullanım sütun dizini ContactsContract.CommonDataKinds.Phone.NUMBER imleç telefon numarasını Getirme için.

2

Eski bir soru ama ben görmüyorum çağrılması, Sonra

android:name="android.permission.READ_CONTACTS"/> 

-

ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
      null, null, null); 
    if (cur.getCount() > 0) { 
     while (cur.moveToNext()) { 
      String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      Log.i("Names", name); 
      if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
      { 
       // Query phone here. Covered next 
       Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null); 
       while (phones.moveToNext()) { 
         String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         Log.i("Number", phoneNumber); 
         } 
       phones.close(); 
      } 

     } 
    } 
0

İletişim seçiciyi kullanabilirsiniz. Herhangi butona

Çağrı Kişi seçici ve aşağıdaki kodu kullanın:

| * | Ekleme tarihi: AndroidManifest.xml

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

| * | ekleyin: activity_name.java

void calContctPickerFnc() 
{ 
    Intent calContctPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    calContctPickerIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
    startActivityForResult(calContctPickerIntent, 1); 
} 

@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(reqCode, resultCode, data); 

    switch (reqCode) 
    { 
     case (1) : 
      if (resultCode == Activity.RESULT_OK) 
      { 
       Uri contctDataVar = data.getData(); 

       Cursor contctCursorVar = getContentResolver().query(contctDataVar, null, 
         null, null, null); 
       if (contctCursorVar.getCount() > 0) 
       { 
        while (contctCursorVar.moveToNext()) 
        { 
         String ContctUidVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts._ID)); 

         String ContctNamVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

         Log.i("Names", ContctNamVar); 

         if (Integer.parseInt(contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
         { 
          // Query phone here. Covered next 
          String ContctMobVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
          Log.i("Number", ContctMobVar); 
         } 

        } 
       } 
      } 
      break; 
    } 
} 
0

Sizin Etkinlik sınıfına Bu kodu ekleyebilirsiniz:

private final int PICK_CONTACT = 5; 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 

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

    //Your code 
    } 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == PICK_CONTACT && resultCode == RESULT_OK) { 
     Uri contactData = data.getData(); 

     Cursor phones = getContentResolver() 
       .query(contactData, 
         null, 
         null, 
         null, 
         null); 

     String name = "", phoneNumber = ""; 

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

     } 
     phones.close(); 
    } 
    } 
İlgili konular