2012-01-08 4 views
7

मैं कॉल लॉग से संपर्क प्राप्त करने का प्रयास कर रहा हूं। मैं इस कोड का उपयोग मुख्य संपर्कों से संपर्क नंबर प्राप्त कर सकते हैं:एंड्रॉइड - कॉल लॉग से संपर्क कैसे प्राप्त करें?

public void getContacts(View view) { 

    Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    startActivityForResult(intentContact, 0); 

} 

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
{ 

    if (requestCode == 0) 
    { 
     try { 
     to.setText(getContactInfo(intent)); 
     } catch(NullPointerException e) { 
       // Do nothing ;) 
     } 

    } 

} 
protected String getContactInfo(Intent intent) 
{ 
    String phoneNumber = to.getText().toString(); 
    Cursor cursor = managedQuery(intent.getData(), null, null, null, null); 
    while (cursor.moveToNext()) 
    { 
     String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
     if(phoneNumber.endsWith(">")) 
      phoneNumber += ", "+name; 
     else 
     phoneNumber += name; 
     String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

     if (hasPhone.equalsIgnoreCase("1")) 
      hasPhone = "true"; 
     else 
      hasPhone = "false" ; 

     if (Boolean.parseBoolean(hasPhone)) 


     { 
      Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 
      while (phones.moveToNext()) 
      { phoneNumber = phoneNumber + " <" + phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+">"; 


       } 
      phones.close(); 
     } 


    } 
    cursor.close(); 
    return phoneNumber; 
} 

यह क्या करता है जब हम एक "संपर्क" बटन यह सब संपर्कों के साथ एक सूची खुल क्लिक करें, उपयोगकर्ता किसी भी संपर्क का चयन कर सकते हैं और है कि चयनित संपर्क "टू" फ़ील्ड में जोड़ा जाएगा। मैं वही काम करना चाहता हूं, लेकिन सभी संपर्कों को प्रदर्शित करने के बजाय मैं केवल उन लोगों को प्रदर्शित करना चाहता हूं जिन्हें चयन के लिए हाल ही में उपयोग किया गया था (कॉल लॉग)।

यह भी अच्छा होगा अगर आप यह भी बता सकें कि समूह के साथ ऐसा कैसे करें।

उत्तर

2

मुझे यह अपने स्वयं के संस्करण का उपयोग करने जा रहा है। मैंने एक संवाद का उपयोग किया और कर्सर को कॉल लॉग में सौंप दिया। यहां फ़ंक्शन है:

public void getCallLog() { 

    String[] callLogFields = { android.provider.CallLog.Calls._ID, 
      android.provider.CallLog.Calls.NUMBER, 
      android.provider.CallLog.Calls.CACHED_NAME /* im not using the name but you can*/}; 
    String viaOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
    String WHERE = android.provider.CallLog.Calls.NUMBER + " >0"; /*filter out private/unknown numbers */ 

    final Cursor callLog_cursor = getActivity().getContentResolver().query(
      android.provider.CallLog.Calls.CONTENT_URI, callLogFields, 
      WHERE, null, viaOrder); 

    AlertDialog.Builder myversionOfCallLog = new AlertDialog.Builder(
      getActivity()); 

    android.content.DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialogInterface, int item) { 
      callLog_cursor.moveToPosition(item); 

      Log.v("number", callLog_cursor.getString(callLog_cursor 
        .getColumnIndex(android.provider.CallLog.Calls.NUMBER))); 

      callLog_cursor.close(); 

     } 
    }; 
    myversionOfCallLog.setCursor(callLog_cursor, listener, 
      android.provider.CallLog.Calls.NUMBER); 
    myversionOfCallLog.setTitle("Choose from Call Log"); 
    myversionOfCallLog.create().show(); 
} 
0

आप संपर्कContract.Contacts.CONTENT_STREQUENT_URI का उपयोग कर सकते हैं जो आपको अक्सर बुलाए जाने वाले और तारांकित संपर्क दोनों प्रदान करेगा।

+0

सामग्री प्रदाता का उपयोग करने का प्रयास करें .... – subrussn90