2013-03-07 3 views
0

Disons que j'ai 100 appels dans mon journal des appels. Je veux trouver les contacts uniques (pas les numéros) qu'ils ont été appelés. Le problème est que si un contact a deux numéros de téléphone (par exemple pour Contact A j'ai un numéro pour la maison et un autre pour le mobile) je compterai ce contact deux fois!Android: Obtenir des contacts uniques appelés à partir du journal des appels

J'ai essayé ce qui suit. Je lis le journal des appels. Ensuite, pour chaque numéro du journal des appels que j'appelle la fonction personnalisée suivante:

private String getContactID (String number) 
{ 
    String contactID = ""; 
    ContentResolver context = getContentResolver(); 

    /// number is the phone number 
    Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(number)); 

    String[] mPhoneNumberProjection = { PhoneLookup._ID }; 

    Cursor cur = context.query(lookupUri,mPhoneNumberProjection, null, null, null); 
    try 
    { 
     if (cur.moveToFirst()) 
     { 
      contactID = cur.getString(0); 
      return contactID; 
     } 
    } 
    finally 
    { 
     if (cur != null) 
      cur.close(); 
    } 
    return contactID; 
} 

j'ai donc alors un CallLog avec ids de contact et l'horodatage de l'appel et à l'aide d'un ensemble que je reçois l'unique, ... ci-dessus le code fonctionne bien mais la performance est très mauvaise! Je l'ai essayé dans un nouveau Google Nexus 4 et cela prend environ 1600 msec! Je ne veux pas penser à d'anciens téléphones intelligents ...

Des suggestions?

+0

Cette question est à considérer avec votre problème http://stackoverflow.com/questions/8654904/group-by-in-contentresolver-in-ice-cream-sandwich –

Répondre

0

Utilisez un fil d'arrière-plan pour chargez paresseux les informations dans un ListView.

Initialement chercher seulement environ 10 résultats et les afficher dans la liste. Cela devrait arriver rapidement. Après cela, dans le fil d'arrière-plan, continuez à aller chercher des informations, 10 à la fois, et continuez à les ajouter à votre liste.

Questions connexes