7
votes

Android - Comment obtenir un contact du journal des appels?

J'essaie d'obtenir des contacts à partir du journal des appels. Je peux obtenir les numéros de contact des contacts principaux à l'aide de ce code:

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


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser ContactContract.Contact.Content_strequent_uri qui vous donnera des contacts fréquemment appelés et rapprochés.


0 commentaires

3
votes

J'ai eu cela en utilisant ma propre version. J'ai utilisé une boîte de dialogue et la tendit le curseur au journal des appels. Voici la fonction:

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


2 commentaires

Grande solution! Pourriez-vous s'il vous plaît aidez-moi-à-vous savoir comment puis-je afficher des noms dans la boîte de dialogue plutôt que les numéros de téléphone?


il suffit de tirer un de ces: eu1.proxysite.com/... du colunindex. Je ne suis pas sûr que celui-ci est, probablement cached_name



0
votes

de l'API 21 est possible d'utiliser ceci: https: //developer.android.com/reference/kotlin/androïd/provider/calllog.Calls#Cached_lookup_uri

Cached_Lookup_uri ajouté dans API Niveau 21 Statique Val Cached_Lookup_uri: String l'URI mis en cache pour rechercher le contact associé au téléphone nombre, s'il existe.

Cette valeur est généralement remplie par l'application Dialer pour la mise en cache but, il n'est donc pas garanti d'être présent et peut ne pas être à jour Si les informations de contact associées à ce numéro ont changé.


0 commentaires