【问题标题】:Android T9 Search Contacts ( Smart Dialer )Android T9 搜索联系人(智能拨号器)
【发布时间】:2016-11-07 03:16:39
【问题描述】:

我想像 android native dialer 或 TrueCaller dialer 那样实现 T9 搜索。到目前为止,我取得的成就是:-

将击键转换为字符串模式,例如,如果我在拨号器上按 2,它会给我 - "abc" "ac" "ca" 等等

现在我做了一个查询

字符串选择 = Utility.getSelectionLikeWithIn(mmemonics);

光标查询 = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, selection, null, null);'

public static String getSelectionLikeWithIn(List 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 Like 'ab%' OR display_name LIKE 'abc%' 等等......

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

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

【问题讨论】:

    标签: android android-contacts contactscontract


    【解决方案1】:

    如果您要按每个数字刷新列表,则此技术将不起作用,因为它会非常慢。

    更好的选择是从Contacts DB 中读取所有 联系人姓名,并将它们存储在一个简单的ArrayList&lt;String&gt; 或类似集合中,最好在读取姓名时将它们转换为toLowerCase()以便在下一步中更轻松地进行搜索。

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

    构建模式后,遍历名称列表并返回与模式匹配的名称。

    【讨论】:

    • 非常感谢兄弟,你让我开心
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2014-03-30
    • 2014-11-01
    • 1970-01-01
    • 2011-04-12
    • 2014-03-30
    相关资源
    最近更新 更多