【问题标题】:Query Contact By (Normalized) Phone Number通过(标准化)电话号码查询联系人
【发布时间】:2011-10-01 02:07:54
【问题描述】:

我真的很惊讶我在任何地方都找不到答案。所以这就是问题所在。

ContentResolver resolver = getContentResolver();

String[] columns = new String[]{Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };
String where = Phone.NUMBER+"=?";
String[] params = new String[] {"777 777 7777"};
Cursor cursor = resolver.query(Phone.CONTENT_URI, columns, where, params, null);    

while (cursor.moveToNext()) { /* So on....*/

当 params 中的电话号码格式为“777 777 7777”时,我没有得到任何记录。当它是“777-777-7777”时,它会获取记录。更糟糕的是 TelephonyManager.EXTRA_INCOMING_NUMBER 给我的号码是“7777777777”。如何查询此电话号码?文档说 Phone.NUMBER 是用户输入它的方式。好吧,那对我没有任何好处!!!

【问题讨论】:

    标签: android android-contacts android-cursor


    【解决方案1】:

    试试这个:

     Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber));        
     Cursor cs= context.getContentResolver().query(uri, new String[]{PhoneLookup.DISPLAY_NAME},null,null,null);
    
     if(cs.getCount()>0)
        contactName=cs.getString(cs.getColumnIndex(PhoneLookup.DISPLAY_NAME));
    
    cs.close();
    

    已编辑(根据您的评论)

    String phoneNumber = "777 777 7777"; 
    Uri uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(phoneNumber));      
    String[] columns = new String[]{Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };    
    Cursor cursor = resolver.query(uri, columns, null, null, null);
    

    【讨论】:

    • 谢谢!我最终选择了这个: String phoneNumber = "777 777 7777"; Uri uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); String[] columns = new String[]{Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };游标 cursor = resolver.query(uri, columns, null, null, null);
    • 谢谢。后续问题:此查询非常慢,需要 1300 毫秒才能在具有 4 个联系人的模拟器中执行。你知道有什么方法可以加快速度吗?当我有数百个联系人时,我很担心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多