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();
List applicationInfos = 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)




