2016-11-07 24 views
0

我想实现T9搜索,如android原生拨号程序或TrueCaller拨号程序。我已经实现至今是: -Android T9搜索联系人(智能拨号器)

转换击键串模式一样,如果我按2拨号它会带给我 - “ABC”,“交流”,“CA”等

现在,我做了一个查询

String selection = Utility.getSelectionLikeWithIn(mmemonics);

Cursor query = getContentResolver()。query(ContactsContract.Contacts.CONTENT_URI,null,selection,null,null);'

公共静态字符串getSelectionLikeWithIn(名单mmemonics){

String selection = ""; 
    for (int i = 0; i < mmemonics.size(); i++) { 
     selection = selection + " display_name LIKE '"; 
     selection = selection + mmemonics.get(i); 

     if (i == mmemonics.size() - 1){ 
      selection = selection + "%'"; 


     }else { 
      selection = selection + "%' OR"; 
     } 
    } 
    return selection; 
}' 

上述方法转换字符串的ArrayList的where子句

其中DISPLAY_NAME像 'AB%' OR DISPLAY_NAME LIKE 'ABC%' 等......

以及这给我的低效结果和应用程序崩溃是由于复杂的查询.....

请建议我如何我可以执行查询来匹配像我的按键或os他们的任何其他方式在ContactsProvider执行此类智能搜索

回答

2

如果您要刷新每个数字的列表按此技术将无法正常工作,因为它会太慢了。

更好的选择是读Contacts数据库中的所有联系人姓名,并将其存储在一个简单的ArrayList<String>或类似的收集,最好是一边看名字将它们转换toLowerCase()使在下一步搜索更容易。

接下来,每个按下的数字,建立从输入数字的regular expression pattern,例如“234”将转换为模式.*[abc][def][ghi].*

建设模式后,通过名称列表进行迭代,并返回匹配的名称模式。

+0

非常感谢兄弟,你让我的一天 – user3037028