在我的searchable.xml中添加约束

时间:2015-12-29 13:09:05

标签: android android-contacts android-contentresolver android-search

我使用以下xml文件为我的SearchView实现自动建议:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/find_contact"
android:hint="@string/find_contact"
android:gravity="center"
android:includeInGlobalSearch="true"
android:queryAfterZeroResults="true"
android:searchMode="queryRewriteFromText"
android:searchSettingsDescription="@string/find_contact"
android:searchSuggestAuthority="com.android.contacts"
android:searchSuggestIntentAction="android.provider.Contacts.SEARCH_SUGGESTION_CLICKED"
android:searchSuggestIntentData="content://com.android.contacts/contacts/lookup" >

<!-- allow green action key for search-bar and per-suggestion clicks -->
<actionkey
    android:keycode="KEYCODE_CALL"
    android:queryActionMsg="call"
    android:suggestActionMsg="call" />

</searchable>

问题是,除了建议有效的联系人之外,它还提供联系人和其他“虚假”联系人中的电子邮件ID的建议。

我想添加一个约束,仅为有效的手机通讯录提供建议,即有电话号码的联系人。

如何实现这个?

1 个答案:

答案 0 :(得分:0)

在我看来,唯一的方法是扩展ContentProvider以查询所需实体的ContactProvider,并将其作为searchSuggestAuthority分配到您的searchable.xml中。

http://developer.android.com/guide/topics/providers/content-provider-creating.html

ContactsContract.Contacts类还包含HAS_PHONE_NUMBER列,因此您可以通过使用以下内容对该字段进行过滤来查询“联系人”提供程序:

context.getContentResolver().query(ContactsContract.Contact.CONTENT_LOOKUP_URI, new String[]{ContactsContract.Contact._ID}, ContactsContract.Contact.HAS_PHONE_NUMBER + "=?", new String[]{"1"}, null), true);

我之前没有检查过代码,但我希望我能提供一些好的建议;)