2011-08-18 159 views
10

關於使用聯繫人API獲取聯繫人號碼的問題,有幾個問題,但我想知道是否有辦法確定檢索的號碼是手機號碼。獲取聯繫人手機號碼

下面的代碼常表現爲一種方式來獲得一個聯繫人的電話號碼,因爲它得到一個或多個電話號碼的清單:

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

雖然,這個工作好,有沒有什麼辦法輕鬆識別電話號碼是移動類型(除了試圖與正則表達式匹配)。

我懷疑必須有一個相關的數據塊,從而使本機應用程序可以將手機號碼分類 - 如在下面的圖片:

Phone types in Contact info

回答

22

我偶然發現了一篇博客文章,其給出了一個漂亮使用ContactsContract api here的好解釋。

所以,在我上面的例子中,我改變了我的代碼部分上面這樣:

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

這繞一圈所有的手機進行個人接觸和類型是Phone.TYPE_MOBILE則藉此一。

希望這可以幫助與我有同樣問題的人。

+0

簡單而完美的+1解決方案 –

1

原始查詢cursor = managedQuery(intent.getData(),projection,selection,null,null);應該能夠爲你處理過濾器。我正在嘗試做同樣的事情。完成後我會發布我的發現。如果有人知道如何使用第三個參數中的selection子句做到這一點。我很想知道答案。