0

我使用下面的XML文件來實現自動提示我的搜索查看:添加約束到我的searchable.xml

<?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的建議中聯繫人和其他「假」聯繫人。

我想添加一個約束,僅爲有效的手機聯繫人提供建議,即具有電話號碼的聯繫人。

如何實施?

回答

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); 

我沒有檢查代碼之前,但我希望我給一些好的提示;)