private Intent createVoiceAppSearchIntent ( Intent baseIntent , SearchableInfo searchable ) { ComponentName searchActivity = searchable . getSearchActivity ( ) ; // create the necessary intent to set up a search-and-forward operation // in the voice search system. We have to keep the bundle separate, // because it becomes immutable once it enters the PendingIntent Intent queryIntent = new Intent ( Intent . ACTION_SEARCH ) ; queryIntent . setComponent ( searchActivity ) ; PendingIntent pending = PendingIntent . getActivity ( getContext ( ) , 0 , queryIntent , PendingIntent . FLAG_ONE_SHOT ) ; // Now set up the bundle that will be inserted into the pending intent // when it's time to do the search. We always build it here (even if empty) // because the voice search activity will always need to insert "QUERY" into // it anyway. Bundle queryExtras = new Bundle ( ) ; // Now build the intent to launch the voice search. Add all necessary // extras to launch the voice recognizer, and then all the necessary extras // to forward the results to the searchable activity Intent voiceIntent = new Intent ( baseIntent ) ; // Add all of the configuration options supplied by the searchable's metadata String languageModel = RecognizerIntent . LANGUAGE_MODEL_FREE_FORM ; String prompt = null ; String language = null ; int maxResults = 1 ; Resources resources = getResources ( ) ; if ( searchable . getVoiceLanguageModeId ( ) != 0 ) { languageModel = resources . getString ( searchable . getVoiceLanguageModeId ( ) ) ; } if ( searchable . getVoicePromptTextId ( ) != 0 ) { prompt = resources . getString ( searchable . getVoicePromptTextId ( ) ) ; } if ( searchable . getVoiceLanguageId ( ) != 0 ) { language = resources . getString ( searchable . getVoiceLanguageId ( ) ) ; } if ( searchable . getVoiceMaxResults ( ) != 0 ) { maxResults = searchable . getVoiceMaxResults ( ) ; } voiceIntent . putExtra ( RecognizerIntent . EXTRA_LANGUAGE_MODEL , languageModel ) ; voiceIntent . putExtra ( RecognizerIntent . EXTRA_PROMPT , prompt ) ; voiceIntent . putExtra ( RecognizerIntent . EXTRA_LANGUAGE , language ) ; voiceIntent . putExtra ( RecognizerIntent . EXTRA_MAX_RESULTS , maxResults ) ; voiceIntent . putExtra ( RecognizerIntent . EXTRA_CALLING_PACKAGE , searchActivity == null ? null : searchActivity . flattenToShortString ( ) ) ; // Add the values that configure forwarding the results voiceIntent . putExtra ( RecognizerIntent . EXTRA_RESULTS_PENDINGINTENT , pending ) ; voiceIntent . putExtra ( RecognizerIntent . EXTRA_RESULTS_PENDINGINTENT_BUNDLE , queryExtras ) ; return voiceIntent ; }
Create and return an Intent that can launch the voice search activity perform a specific voice transcription and forward the results to the searchable activity .