1
我試圖查詢所有可用的搜索提供程序,類似於快速搜索框的操作方式,以獲取搜索建議列表。我忽略了我沒有權限閱讀的內容。現在,一切都適用於立即返回結果的提供者。如何查詢類似android的QSB的SearchProviders?
但是,對於那些離開並從網絡獲得結果的人,我無法獲得任何結果。其中一個例子是IMDB應用程序。通常我得到的遊標返回null,其他時候我得到一些不正確的緩存結果。
任何人都知道如何做到最好?
在下面的例子中,(它運行在一個線程中),我只是等待一段時間,以確保任何網絡的東西是完整的。我在ChangeObserver和MyDataObserver中等待回調,但我什麼都沒有收到。我嘗試過使用LoaderManager,但沒有區別。我查看了Android的快速搜索框的源代碼,但找不到任何線索。
SearchManager searchManager = (SearchManager)ProgDialog.this.getContext().getApplicationContext().getSystemService(Context.SEARCH_SERVICE);
List<SearchableInfo> searchables = searchManager.getSearchablesInGlobalSearch();
for(SearchableInfo si : searchables)
{
if(si.getSuggestPackage() == null) continue;
String query = title;
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.authority(si.getSuggestAuthority());
uriBuilder.scheme(ContentResolver.SCHEME_CONTENT);
if(si.getSuggestPath() != null)
{
uriBuilder.appendEncodedPath(si.getSuggestPath());
}
uriBuilder.appendPath(SearchManager.SUGGEST_URI_PATH_QUERY);
// get the query selection, may be null
String selection = si.getSuggestSelection();
// inject query, either as selection args or inline
String[] selArgs = null;
if (selection != null) { // use selection if provided
selArgs = new String[] { query };
} else { // no selection, use REST pattern
uriBuilder.appendPath(query);
}
Uri uri = uriBuilder.build();
if(!canRead(uri))
{
continue;
}
c = context.getApplicationContext().getContentResolver().query(uri, null,
selection, selArgs, null);
if(c != null)
{
c.registerContentObserver(new ChangeObserver(c));
c.registerDataSetObserver(new MyDataSetObserver(si.getSuggestPackage(), c));
c.setNotificationUri(context.getContentResolver(), uri);
Thread.sleep(8000);