如何实现对SearchView的语音搜索

时间:2013-07-24 22:34:17

标签: android searchview

我想在我的应用程序中添加语音搜索功能。我正在SherlockActivity中填充SearchView。但我找不到为SearchView对象添加语音搜索功能的解决方案。

请您提出建议,我需要做什么?

以下代码:

    public class MainActivity extends SherlockActivity {
        private SlidingMenu slidingMenu;
        private SlidingMenu slidingMenuRight;
        private String mFilterArrays[];
        public long lastScrollTime=0; /** En son kaydırma ne zaman yapıldı*/
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    }   

        public boolean onCreateOptionsMenu(Menu menu) {

                    //Create the search view
                    SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
                    searchView.setQueryHint("Search...");


                    menu.add("Search")
                        .setIcon(R.drawable.ic_search_inverse)
                        .setActionView(searchView)
                        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
                        return true;
    }
}

Mainfest

<activity
    android:name="com.paea.bcp.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="com.paea.bcp.MainActivity" />
        <category android:name="android.intent.category.DEFAULT" />
        <action android:name="android.intent.action.SEARCH" />                
    </intent-filter>
</activity>

3 个答案:

答案 0 :(得分:5)

您可以查看文档here

更新:如果您的SearchActivity是相同的,您可以覆盖onNewIntent并在那里处理搜索意图。同时将您的活动设为singleTop,这样只有一个活动实例将保持在最顶层。

希望这有帮助,如果找到解决方案,请通知。

干杯!

答案 1 :(得分:3)

res/xml文件夹中,您应该有一个可搜索的文件(通常称为searchable.xml)。

在该文件的<searchable />元素中,您应该添加以下属性:

android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"

还有其他与语音相关的属性(目前为voicePromptTextvoiceLanguageModelvoiceLanguage),这些属性均为described here

答案 2 :(得分:0)

如果您有SearchView而不是SearchActivity,则可以执行以下两个步骤来解决此问题: 1)在活动标签内的manifest.xml中声明可搜索的设置,如下所示:

<meta-data android:name="android.app.searchable"
        android:resource="@xml/searchable" />

2)然后将活动类中可搜索的设置与SearchView关联(即在onCreateOptionsMenu()方法中),如下所示:

SearchManager searchManager =
       (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
        (SearchView) findViewById(R.id.search);
searchView.setSearchableInfo(
        searchManager.getSearchableInfo(getComponentName()));

有关更多信息,see docs