Как работает VoiceInteractionService? - PullRequest
6 голосов
/ 09 мая 2019

У меня много вопросов о службе VoiceInteractionService.

https://developer.android.com/reference/android/service/voice/VoiceInteractionService

Что мне кажется ясным, так это то, что это механизм, с помощью которого помощник Google подключается к ОС, чтобы фактически работать помощником по умолчанию. Тем не менее, есть еще много об этом, которые требуют большего объяснения.

В сеансе VoiceInteraction:

  1. В документации говорится, что «интерфейс пользователя изначально отображается по умолчанию и может быть создан с переопределением onCreateContentView () (https://developer.android.com/reference/android/service/voice/VoiceInteractionSession.html#onCreateContentView()), в котором может быть построен пользовательский интерфейс». Как следует использовать пользовательский интерфейс для голосовой службы быть построенным? В настоящее время наш пользовательский интерфейс существует в Activity. Но существование getLayoutInflater (), getWindow (), onShow () и onCreateContentView () в сеансе заставляет меня не знать, как должен отображаться пользовательский интерфейс. Должен ли я отправлять намерение, чтобы показать нашу активность пользовательского интерфейса в onShow ()? Или я должен создать пользовательский интерфейс в Java и вернуть его как представление в onCreateContentView ()? Должен ли я использовать окно для рисования? Нужно ли вызывать setContentView ( ) в любой момент?
  2. Мне также неясно, как связаны метод startAssistantActivity (), метод startVoiceActivity () и вышеприведенные методы. Когда мы хотим вызвать startAssistantActivity? Когда мы хотим вызвать startVoiceActivity? В документации говорится: «По умолчанию система создаст окно для пользовательского интерфейса для этого сеанса. Если вместо этого вы используете помощник, то вы можете отключить создание окна, вызвав setUiEnabled в onPrepareShow ». Это представление возвращается функцией onCreateContentView ()? Является ли startAssistantActivity () альтернативным способом отображения пользовательского интерфейса помощника по сравнению с onCreateContentView?
  3. Как вызывается onLockscreenShown ()? Вызывается ли он, когда помощник запускается с экрана блокировки? Если пользователь блокирует свой телефон, когда помощник открыт?
  4. Нужно ли что-то особенное сделать, чтобы показать интерфейс помощника поверх экрана блокировки?
  5. Почему бы вам не вызвать closeSystemDialogs ()? Кажется, что вы почти никогда не хотите, чтобы системные окна были видны поверх приложения-помощника.
  6. Если пользователь вызвал помощника, удерживая кнопку «Домой», или каким-либо другим способом, есть ли способ надежно получить имя компонента переднего плана? Я вижу, что getActivityComponent () является аксессором в AssistStructure, но мне не ясно, в каких ситуациях сеанс будет иметь доступ к этому объекту.
  7. Каковы жизненные циклы различных служб и сеансов? Если существует отдельный сервис, который фактически обрабатывает обработку аудиоданных, когда этот сервис должен быть связан / не связан? В onShow () и onHide ()?

VoiceInteractionService:

  1. createAlwaysOnHotwordDetector - Что, если я хочу, чтобы несколько горячих слов были активны одновременно? Например, «Привет, Google» и «ОК, Google»?
  2. О обратном вызове детектора горячих слов: при вызове onDetected существует метод getTriggerAudio (), который содержит необработанный звук, который инициировал запрос. Как вы гарантируете, что не пропустите ни одного из выступлений пользователя? Например, для пользователя гораздо удобнее сказать «Эй, Google time», чем «Эй, Google…». время».
  3. Является ли правильный ответ в обратном вызове для вызова showSession?
  4. Предполагая, что помощник хотел выполнить вторичную проверку слова пробуждения (то есть убедиться, что пользователь действительно произнес горячее слово), прежде чем показывать какой-либо пользовательский интерфейс, это лучший способ сделать это:
    1. Запустить проверку в обратном вызове с детектора горячих слов
    2. Если это действительно пробужденное слово, вызовите сеанс показа
    3. В противном случае, игнорировать молча
  5. Документация для onLaunchVoiceAssistFromKeyguard говорит, что вам нужно начать действие с флагом показа на экране блокировки.Это немного сбивает с толку, потому что я все еще не уверен, должен ли я начинать действие для отображения пользовательского интерфейса или каким-то образом использовать onCreateContentView ()?
  6. Что делает setUiHints?В каком контексте будут появляться подсказки?Они тосты?Они встроены в другой пользовательский интерфейс?

Общие вопросы:

  1. Какая связь между следующими атрибутами манифеста и VoiceInteractionService?Основываясь на некоторой другой документации в Интернете, необходимо показать в качестве потенциального помощника по умолчанию следующий код, отсекаемый в AndroidManifest.xml, например: https://gist.github.com/pedrovgs/c424fe754a74f326e997. Но также кажется, что приложение, содержащее VoiceInteractionService, являетсяавтоматически в списке.Есть ли рекомендуемый способ продвижения вперед для получения другого помощника?
...