Android:获取从通话记录中调用的唯一联系人

Posted

技术标签:

【中文标题】Android:获取从通话记录中调用的唯一联系人【英文标题】:Android: Get unique contacts called from the call log 【发布时间】:2013-02-22 09:37:43 【问题描述】:

假设我的通话记录中有 100 个通话。我想找到他们被调用的唯一联系人(不是号码)。 问题是,如果一个联系人有两个电话号码(例如,对于联系人 A,我有一个家庭电话号码和另一个电话号码),我会将该联系人计数两次!

我尝试了以下方法。 我正在阅读通话记录。然后对于每个通话记录号码,我调用以下自定义函数:

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;

然后我有一个带有联系人 ID 和通话时间戳的通话记录,并使用 Set 我得到了唯一的... 上面的代码工作正常,但性能很差!我在新的 Google Nexus 4 中尝试过,大约需要 1600 毫秒!我不想考虑旧的智能手机...

有什么建议吗?

【问题讨论】:

这个问题好像在考虑你的问题***.com/questions/8654904/… 【参考方案1】:

使用后台线程延迟加载 ListView 中的信息。

最初只获取大约 10 个结果并将它们显示在列表中。这应该很快发生。之后,在后台线程中,继续获取信息,一次 10 个,然后继续将它们添加到您的列表中。

【讨论】:

以上是关于Android:获取从通话记录中调用的唯一联系人的主要内容,如果未能解决你的问题,请参考以下文章

Android通讯录管理(获取联系人通话记录短信消息)

宿主手机联系人通话记录短信工具类(不断完善中。。。)

如何从 Android 系统获取回调到应用程序?

如何从 android (CallLog.Calls.CONTENT_URI) 表中获取联系人姓名?

Android取证工具

Android取证工具