2017年2月3日 星期五
【Android】Android Search Framework - SearchManagerService
./frameworks/base/core/java/android/server/search/SearchManagerService.java
呼叫buildSearchableList()
這個function來自Searchables.java,它會
(1) 建立一個可被全面搜索的Activity清單,用來搜索ACTION_SEARCH和ACTION_WEB_SEARCH的intent
(2) 並且清除現有的所有Activity的雜湊表(hash)→ 當使用者按下 ‘search’ 會重新建立
(3) 這個方法應該只會在開機 or 當我們知道清單被改變的時候才會執行
(4) 如果AndroidManifest.xml裡面。Activity若有宣告,
那同時也需要有這個
因為,
function中的寫法searchList = ...的第二個參數 GET_META_DATA,會要求傳回那個Activity相對應的meta-data,
所以如果不設定meta-data就不會被加入清單
檢查Activity是不是有search功能的,如果是就拿它的meta-data資料;如果不是Searchable的Activity或是沒有宣告meta-data,就會傳回 null
設有GLOBAL_SEARCH權限可供global search 的activity清單,在有變更時做更新
從PackageManager清單中搜尋有提供web search的所有activity
呼叫buildSearchableList()
這個function來自Searchables.java,它會
(1) 建立一個可被全面搜索的Activity清單,用來搜索ACTION_SEARCH和ACTION_WEB_SEARCH的intent
(2) 並且清除現有的所有Activity的雜湊表(hash)→ 當使用者按下 ‘search’ 會重新建立
(3) 這個方法應該只會在開機 or 當我們知道清單被改變的時候才會執行
(4) 如果AndroidManifest.xml裡面。Activity若有宣告
那同時也需要有這個
因為,
function中的寫法searchList = ...的第二個參數 GET_META_DATA,會要求傳回那個Activity相對應的meta-data,
所以如果不設定meta-data就不會被加入清單
檢查Activity是不是有search功能的,如果是就拿它的meta-data資料;如果不是Searchable的Activity或是沒有宣告meta-data,就會傳回 null
設有GLOBAL_SEARCH權限可供global search 的activity清單,在有變更時做更新
【Android】Android Search Framework - Implement - getPackageManager().getInstalledApplications(0)
SearchableActivity.java
...前略... public void query_AP() { //列出所有AP PackageManager manager = context.getPackageManager(); ListapplicationInfos = manager.getInstalledApplications(0); Iterator iterator = applicationInfos.iterator(); try { lstStringItem = new ArrayList >(); do { ApplicationInfo applicationInfo = iterator.next(); HashMap resultMap = new HashMap (); resultMap.put("packageName", applicationInfo.packageName); resultMap.put("packageLabel", manager.getApplicationLabel(applicationInfo).toString()); lstStringItem.add(resultMap); }while(iterator.hasNext()); } catch (Exception e) { } SimpleAdapter saImageItems = new SimpleAdapter(this, lstStringItem, R.layout.ap_item,//TextView*2 new String[] {"packageName", "packageLabel"}, new int[] {R.id.AP_TextView01, R.id.AP_TextView02} ); listview.setAdapter(saImageItems); } ... //
訂閱:
文章 (Atom)