Slide 1

Slide 1 text

Android Voice Search

Slide 2

Slide 2 text

Rules for a good search experience —You need to provide good content —It has to be fast —It has to be simple

Slide 3

Slide 3 text

Search in Android —Persistent search —Expandable search

Slide 4

Slide 4 text

Persistent Search Use persistent search when search is the primary focus of your app.

Slide 5

Slide 5 text

Expandable Search Display a magnifying glass icon in the toolbar instead of a search text box.

Slide 6

Slide 6 text

Voice Search

Slide 7

Slide 7 text

Voice Search —When entering text, allow users to either use the keyboard or their voice. —Let Android handle voice recognition —Voice search is a great feature, but very error prone (and sometimes frustating) —It submits directly what it is said (so no opportunities for second attempts) —Combine text search and voice search

Slide 8

Slide 8 text

SearchView —It is built-in component in the Android framework —It lives in the Toolbar —When activated, turns your toolbar into a text input field —It can also provide historical results —Available in all Android versions (through AppCompat)

Slide 9

Slide 9 text

SearchView as MenuItem

Slide 10

Slide 10 text

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater.inflate(R.menu.main_activity_options, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView)MenuItemCompat.getActionView(searchItem); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { // Text has changed, apply filtering? return false; } @Override public onQueryTextSubmit(String query) { // Perform the final search } }); }

Slide 11

Slide 11 text

Searchable Configuration —This is a configuration file for search settings: Info

Slide 12

Slide 12 text

AndroidManifest.xml

Slide 13

Slide 13 text

onCreateOptionsMenu() SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); ComponentName componentName = new ComponentName(context, SearchableActivity.class); searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));

Slide 14

Slide 14 text

Getting the search query Call this from onCreate() or onNewIntent(). private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); } }