как отобразить настройки распознавания голоса Google в моем приложении?

Я работаю над приложением для Android, в котором я реализовал распознавание голоса и TTS. Поэтому я подумал запустить экран настроек как для распознавания голоса Google, так и для TTS, чтобы пользователь мог изменять настройки из приложения. Я успешно реализовал настройки TTS, используя следующий код:

intent = new Intent();
intent.setAction("com.android.settings.TTS_SETTINGS");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);

Теперь я хочу показать системные «настройки распознавания голоса Google» в своем приложении, чтобы позволить пользователю изменять языковые параметры и т. Д. Я много искал ... Сделал много попыток, но не смог загрузить экран настроек распознавания голоса. Подскажите, пожалуйста, как мне это реализовать. Заранее спасибо...


person Pargat    schedule 15.01.2012    source источник


Ответы (2)


Я тоже застрял на этом на долгие годы...

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setComponent(newComponentName("com.google.android.voicesearch","com.google.android.voicesearch.VoiceSearchPreferences"));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    this.startActivity(intent);
    }

Надеюсь, для вас тоже...

РЕДАКТИРОВАТЬ: Как указано в комментариях, это изменилось в версии приложения Google Search для Jelly Bean. Чтобы выявить любые потенциальные проблемы с обновлением, когда вы не можете использовать Build.Version, вы можете использовать что-то вроде этого:

try {
final Intent vsInt = new Intent(Intent.ACTION_MAIN);
vsInt.setComponent(new ComponentName("com.google.android.voicesearch",
                            "com.google.android.voicesearch.VoiceSearchPreferences"));
vsInt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(vsInt);

} catch (final Exception e) {

try {
final Intent vsjInt = new Intent(Intent.ACTION_MAIN);
vsjInt.setComponent(new ComponentName("com.google.android.googlequicksearchbox", "com.google.android.voicesearch.VoiceSearchPreferences"));
vsjInt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(vsjInt);

} catch (final Exception e1) {
e1.printStackTrace();
}
}
person brandall    schedule 17.03.2012
comment
Спасибо, чувак... Ты спас мне жизнь. Он отлично работает... :) Не могли бы вы рассказать мне, как вы узнали, какое имя компонента/путь будет работать для VoiceSearchPreferences. Потому что я также потратил много усилий, чтобы решить это, но не смог добиться успеха. Еще раз спасибо..!!! - person Pargat; 18.03.2012
comment
@pargat Было МНОГО проб и ошибок ... У меня на устройстве есть полезное приложение под названием «Проводник пакетов», которое показывает подробную информацию о действиях и компонентах, доступных для использования. Хорошо иметь под рукой и помогло мне решить, как отображать эти настройки. ссылка - person brandall; 19.03.2012
comment
Это не работает после Gingerbread. stackoverflow.com/questions/11860229/ - person Mark; 16.08.2012
comment
Я не знал об изменении Jelly Bean, спасибо. Но вышеперечисленное должно нормально работать на всех устройствах Honeycomb и ICS? Многие пользователи/тестировщики подтверждают... +работает на всех моих тестовых устройствах - person brandall; 16.08.2012
comment
Это будет работать для всех устройств до Jelly Bean после JellyBean «как отобразить экран настроек распознавания голоса программно»> stackoverflow.com/questions/11860229/ - person Chaitu; 26.08.2013
comment
@Chaitu - обновленный ответ. Вы не можете проверить это с помощью Build.Version, так как он устанавливается в зависимости от приложения, а не от версии ОС. - person brandall; 26.08.2013

Ответ @brandall не работает для меня на Android 5.1, например, для настроек распознавания голоса там используется другое имя компонента.

/**
 * Open speech recognition settings activity
 *
 * @return true in case activity was launched, false otherwise
 **/
public boolean openSpeechRecognitionSettings() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    boolean started = false;
    ComponentName[] components = new ComponentName[]{
            new ComponentName("com.google.android.googlequicksearchbox", "com.google.android.apps.gsa.settingsui.VoiceSearchPreferences"),
            new ComponentName("com.google.android.voicesearch", "com.google.android.voicesearch.VoiceSearchPreferences"),
            new ComponentName("com.google.android.googlequicksearchbox", "com.google.android.voicesearch.VoiceSearchPreferences"),
            new ComponentName("com.google.android.googlequicksearchbox", "com.google.android.apps.gsa.velvet.ui.settings.VoiceSearchPreferences")
    };
    for (ComponentName componentName : components) {
        try {
            intent.setComponent(componentName);
            startActivity(intent);
            started = true;
            break;
        } catch (final Exception e) {
            Timber.e(e, null);
        }
    }
    return started;
}

РЕДАКТИРОВАТЬ: обновлено с последним именем компонента

person Eugene Popovich    schedule 12.01.2016
comment
Работает на Android 4.4.2 - person igla; 04.01.2017
comment
@AdrianBuciuman похоже, что настройки больше не доступны в настройках системы - person Eugene Popovich; 22.11.2017
comment
@httpdispatch на Android 7.1.1 Settings -> Languages & Input -> Virtual keyboard -> Google Voice typing отображаются настройки. - person Adrian Buciuman; 22.11.2017
comment
@AdrianBuciuman вау, приятно найти. Я протестирую это новое окно и обновлю ответ - person Eugene Popovich; 22.11.2017
comment
@AdrianBuciuman Я добавил новое имя компонента в ответ, но стороннее приложение не может открыть это окно из-за SecurityException. Я не уверен, есть ли обходные пути для этого - person Eugene Popovich; 22.11.2017
comment
@AdrianBuciuman похоже, я нашел правильное имя компонента. Пожалуйста, проверьте обновленный ответ. Большое спасибо за находку. - person Eugene Popovich; 22.11.2017
comment
@httpdispatch Как вы нашли этот класс? потому что, если я сделаю adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'" , он отобразит этот класс com.google.android.googlequicksearchbox/com.google.android.apps.gsa.velvet.ui.settings.SettingsActivity - person Adrian Buciuman; 22.11.2017
comment
@AdrianBuciuman Я открыл окно, которое вы нашли в настройках виртуальной клавиатуры, и проверил вывод logcat. Там я нашел следующую запись /ActivityManager: START u0 {act=android.intent.action.MAIN cmp=com.google.android.googlequicksearchbox/com.google.android.apps.gsa.settingsui.VoiceSearchPreferences} из uid 1000 на дисплее 0 - person Eugene Popovich; 22.11.2017