2011-08-18 18 views
10

संपर्क API का उपयोग कर संपर्क संख्या प्राप्त करने के संबंध में SO पर कई प्रश्न हैं लेकिन मैं यह जानना चाहता हूं कि पुनर्प्राप्त संख्या एक मोबाइल नंबर है या नहीं।संपर्क मोबाइल नंबर केवल

निम्नलिखित कोड अक्सर, एक तरह से एक संपर्क के फोन नंबर प्राप्त करने के लिए के रूप में दिखाया गया है के रूप में यह एक या अधिक फोन नंबरों की सूची हो जाता है:

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

मैं एक ब्लॉग लेख जो एक बहुत देता है पर ठोकर खाई संपर्कों का उपयोग करने की अच्छी व्याख्या एपीआई 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

मूल क्वेरी कर्सर = प्रबंधितQuery (intent.getData(), प्रक्षेपण, चयन, शून्य, शून्य); आपके लिए फ़िल्टर को संभालने में सक्षम होना चाहिए। मैं वही काम करने की कोशिश कर रहा हूं। पूरा होने पर मैं अपने निष्कर्ष पोस्ट करूंगा। यदि कोई जानता है कि तीसरे पैरामीटर में चयन खंड का उपयोग करके इसे कैसे किया जाए। मुझे जवाब जानना अच्छा लगेगा।

संबंधित मुद्दे