2017年2月3日 星期五

【Android】Sound Recorder Compare





【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

【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);       
 }
...
//