Search code examples
androidvoice-recognition

How to enable Android Open Application voice interaction


According to the system voice command docs, you can open an application with a voice command. e.g. OK Google - open foobar. Also according to the docs, this Works by default; no specific intent.
In my sample development app, this isn't working. I've tried adding a few combinations of action and category permutations to the intent-filter, but no luck so far.
I'm targeting a minimum SDK of 23, testing on a device with 6.0.1.

Should this work, and if so, what are the changes to a new empty activity project I need to enable it?


Solution

  • As far as I am aware, Google simply iterates over a list of installed applications and opens the corresponding application if it finds an exact match.

    To test this, use the following Intent

            final String PACKAGE_NAME_GOOGLE_NOW = "com.google.android.googlequicksearchbox";
            final String GOOGLE_NOW_SEARCH_ACTIVITY = ".SearchActivity";
            final String APP_NAME = "Open " +getString(R.string.app_name);
    
            final Intent startMyAppIntent = new Intent(Intent.ACTION_WEB_SEARCH);
            startMyAppIntent.setComponent(new ComponentName(PACKAGE_NAME_GOOGLE_NOW,
                    PACKAGE_NAME_GOOGLE_NOW + GOOGLE_NOW_SEARCH_ACTIVITY));
    
            startMyAppIntent.putExtra(SearchManager.QUERY, APP_NAME);
            startMyAppIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
            try {
                startActivity(startMyAppIntent);
            } catch (final ActivityNotFoundException e) {
                e.printStackTrace();
            }
    

    If this opens your application, then it is simply a case of the phonetics of your application name, or how Google interprets your pronunciation of it.

    I do think that there should be an option to add a 'phonetic app label' to the application's manifest (or some other globally available configuration file), so Google could open your application if the unique name is not common enough to generate a voice search result.

    If this doesn't open your application, check that you are correctly defining your application name in the manifest as follows:

    <application
        android:label="@string/app_name"