2012-01-08 23 views
7

Estoy tratando de obtener contactos del registro de llamadas. Puedo conseguir los números de contacto de los contactos principales de utilizar este código:Android - ¿Cómo obtener un contacto del registro de llamadas?

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

Lo que esto hace es cuando se hace clic en un botón de "Contacto" se abre una lista con todos los contactos, el usuario puede seleccionar cualquier contacto y la seleccionada se agregará contacto en el campo "Para". Quiero hacer exactamente lo mismo, pero en lugar de mostrar todos los contactos, quiero mostrar solo aquellos que fueron usados ​​recientemente (registro de llamadas) para su selección.

También sería bueno si usted puede decir cómo hacerlo con los grupos también.

Respuesta

2

Tengo esto funcionando con mi propia versión. utilicé un diálogo y le di el cursor al registro de llamadas. Aquí está la función:

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

Puede usar ContactsContract.Contacts.CONTENT_STREQUENT_URI que le proporcionará contactos llamados con frecuencia y destacados.

+0

intente utilizar un ContentProvider .... – subrussn90

Cuestiones relacionadas