2012-03-08 24 views
2

我正在開發一個簡單的語音識別器,使用Android提供的服務並閱讀Android Developers網站上的speech input article。本文示出了下面的代碼:爲什麼在queryIntentActivities()方法中指定的標誌被設置爲零?

PackageManager pm = getPackageManager(); 
List<ResolveInfo> activities = pm.queryIntentActivities(
    new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 

... 

queryIntentActivities方法的第二個參數是一個int標誌。如果我瞭解它,則使用此標誌來添加其他搜索選項:在這種情況下,有哪些選項可用於搜索指定的Intent

爲什麼示例中指定的標誌被設置爲零?

回答

2

這應該在Android Issue Mgmt System中作爲SDK文檔問題提交。我有同樣的問題。 PackageManager是一個抽象類,其子類最終最終調用稱爲「PackageManagerService」的系統服務,該服務實現了#queryIntentActivities(Intent,int)的邏輯。

在文檔改進之前,可以在源代碼中找到答案,例如在http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/com/android/server/PackageManagerService.java#PackageManagerService.Settings.isEnabledLP%28android.content.pm.ComponentInfo%2Cint%29處的1.5r4源代碼。

爲什麼示例中指定的標誌被設置爲零?

「0」標誌很可能是永久複製的某些示例/參考代碼的補充。 PackageManagerService中的代碼不容易遵循。它看起來像com.android.server.IntentResolver#queryIntent(...)最終在解析過程中被調用。這個方法的調用者只關心MATCH_DEFAULT_ONLY標誌的位值。請記住,意向標誌可以是「或」和「與」。我想說的是#queryIntent(...)最終會看到MATCH_DEFAULT_ONLY的位值是否設置。

在這種情況下,有哪些選項可用於搜索指定的Intent?

在目前的情況下,很難充滿信心地說,哪些標誌實際上起作用,以及它們如何在沒有重大試驗和代碼分析的情況下工作。我可以說使用了PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT和PackageManager.COMPONENT_ENABLED_STATE_DISABLED。

1

在這種情況下,有哪些選項可用於搜索指定的Intent?

報價the documentation

附加選項標誌。最重要的是MATCH_DEFAULT_ONLY,以便將解決方案限制爲僅支持CATEGORY_DEFAULT的活動。

 

爲什麼在本例中指定的標誌設置爲零?

因爲他們不需要MATCH_DEFAULT_ONLY,顯然。

+1

我已經閱讀過文檔,但它只涉及'MATCH_DEFAULT_ONLY'。我認爲還有其他值,但是因爲在這種情況下似乎足以指定0,那就這樣吧。 – enzom83 2012-03-08 20:38:03

+0

@ enzom83:正確。無論出於何種原因,如果有其他可能的標誌,他們選擇不記錄它們。因此,你不應該擔心他們。 – CommonsWare 2012-03-08 20:38:58

相關問題