Google voice Actions: когда значение Activity.isVoiceInteraction соответствует действительности?
Контекст:
Я пытаюсь интегрировать голосовые действия Google в свое приложение. Я видел и понял (или, по крайней мере, так, как я думаю) пример google codelabs-io2015, и в этом примере, если вы не модифицируете код, все работает как положено. Проблема начинается, когда вы пытаетесь адаптировать этот пример к вашему реальному варианту использования.
Проблема:
Итак, моя проблема в том, что я пытаюсь реализовать голосовое действие поиска, но Activity#isVoiceInteraction всегда ложно. Я, наконец, не понимаю, когда и почему активность (а когда нет) связана с голосовым интерактором.
Исследование:
Изучая исходный код API уровня Activity, Activity#isVoiceInteraction и Activity # getVoiceInteractor, я обнаружил следующее:
/**
* Check whether this activity is running as part of a voice interaction with the user.
* If true, it should perform its interaction with the user through the
* {@link VoiceInteractor} returned by {@link #getVoiceInteractor}.
*/
public boolean isVoiceInteraction() {
return mVoiceInteractor != null;
}
,
/**
* Retrieve the active {@link VoiceInteractor} that the user is going through to
* interact with this activity.
*/
public VoiceInteractor getVoiceInteractor() {
return mVoiceInteractor;
}
и mVoiceInteractor
только инициализировать на attach
функция как показано ниже:
final void attach(Context context, ActivityThread aThread,
Instrumentation instr, IBinder token, int ident,
Application application, Intent intent, ActivityInfo info,
CharSequence title, Activity parent, String id,
NonConfigurationInstances lastNonConfigurationInstances,
Configuration config, String referrer, IVoiceInteractor voiceInteractor) {
...
mLastNonConfigurationInstances = lastNonConfigurationInstances;
if (voiceInteractor != null) {
if (lastNonConfigurationInstances != null) {
mVoiceInteractor = lastNonConfigurationInstances.voiceInteractor;
} else {
mVoiceInteractor = new VoiceInteractor(voiceInteractor, this, this,
Looper.myLooper());
}
}
...
}