2011-08-18 22 views
10

Kişiler API'sini Kişiler API'sını kullanarak alma konusunda SO'yla ilgili birkaç soru vardı, ancak alınan numaraların bir cep telefonu numarası olduğunu belirlemek için bir yol olup olmadığını öğrenmek istiyorum. bir veya daha fazla telefon numarası listesi alır gibiGet Contacts Yalnızca cep telefonu numarası

Aşağıdaki kod genellikle bir Kişinin telefon numaralarını almak için bir yol olarak gösterilmiştir: iken

String[] projection = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER}; 
    String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1"; 

    Cursor cursor = null; 
    Cursor phones = null; 
    try 
    { 
     cursor = managedQuery(intent.getData(), projection, selection, null, null); 
     while (cursor.moveToNext()) 
     {   
      String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

      phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 
      while (phones.moveToNext()) 
      {    
       String pdata = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)); 
       Log.v("DATA",pdata); 
      }       
     } 
    } 
    catch (NullPointerException npe) 
    { 
     Log.e(TAG, "Error trying to get Contacts."); 
    } 
    finally 
    { 
     if (phones != null) 
     { 
      phones.close(); 
     } 
     if (cursor != null) 
     { 
      cursor.close(); 
     }   
    } 

, bu çalışmaları tamam, herhangi bir şekilde orada Telefon numarasının mobil bir tür olduğunu kolayca tanımlayın (Regex ile desen eşleştirmeye çalışmak dışında). Ben oldukça veren bir blog makalesinde tökezledi

Phone types in Contact info

cevap

22

: Aşağıdaki resimdeki gibi - Ben yerli uygulamalar telefon numarasını sınıflandırmak, böylece verilerin ilgili parça olmalıdır şüpheli

ContactsContract api here'u kullanmanın iyi bir açıklaması.

Yani, yukarıda benim örnekte, buna yukarıda benim kod parçasını değiştirdi:

while (phones.moveToNext()) 
{     
    int phoneType = phones.getInt(phones.getColumnIndex(Phone.TYPE)); 
    if (phoneType == Phone.TYPE_MOBILE) 
    { 
      phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)); 
      phoneNumber = phoneNumber.replaceAll("\\s", ""); 
      break; 
    } 
} 

Bu bireysel bir kişi için çevresindeki tüm telefonlar döngüler ve tip Phone.TYPE_MOBILE ise o zaman bu sürer bir.

Bunun, aynı sorunu yaşadığım birine yardımcı olmasını umarım.

+0

basit ve mükemmel +1 çözümü –

1

Özgün sorgu imleci = managedQuery (intent.getData(), projeksiyon, seçim, boş, boş); Filtreyi sizin için halledebilmeli. Ben de aynı şeyi yapmaya çalışıyorum. Tamamlandığında bulgularımı yayınlayacağım. Üçüncü parametredeki seçim maddesini kullanarak bunu nasıl yapacağını bilen varsa. Cevabı bilmek isterim.

İlgili konular