2

Я создал своего рода постоянной notification, и моя цель состоит в том, как этоGoogle речи в текст от оповещении

1) Пользователь вводит на notification
2) Google Speech to Text activity начинается и принимает голосовой ввод
3) Ввод преобразуется в текст и начинается новое действие, которое показывает этот текст.

Вот что я пытался так far--

NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this) 
      .setSmallIcon(android.R.drawable.ic_dialog_alert) 
      .setContentTitle("Tap for voice input") 
      .setContentText("Hi"); 

    Intent resultIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    resultIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    resultIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
    resultIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
      getString(R.string.speech_prompt)); 
    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(pendingIntent); 

    Notification notification = builder.build(); 
    notification.flags = Notification.FLAG_NO_CLEAR; 

    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(MainActivity.this); 
    notificationManager.notify(0, notification); 

Теперь я знаю, что я могу обрабатывать результаты распознаватель Intent обычно с помощью startActivityForResult(resultIntent, REQ_CODE_SPEECH_INPUT); и обработки его в моем activity.

, но я должен передать свое намерение в pendingIntent для notification.

В любом случае я могу достичь этого?

Edit 1:

я могу начать новую деятельность, а затем открыть голос Google голосовые подсказки, но я хочу, преобразованную строку быть передана моей деятельности до ее начала, как с дополнительным параметром цель ...

+1

Я думаю, что предоставленный ответ наиболее подходит для ваших нужд - в противном случае, если вы хотите получить более технический, вы можете использовать класс SpeechRecognizer для получения речевого ввода из службы, а затем передать параметры на Деятельность после его завершения. – brandall

ответ

2

Использовать «невидимый» Activity в качестве посредника. Можно иметь действия без пользовательского интерфейса, см., Например, this SO post от Emanuel Moecklin. Таким образом, вы можете изменить поток вашего приложения, как это:

  • Пользователь вводит на уведомления
  • Activity без UI начала и вызывает startActivityForResult(), чтобы получить результат для преобразования STT
  • Google речи в текст Activity начинается и принимает голосовой ввод
  • вход преобразуется в текст и передается в результате к UI-менее Activity
  • ... который в свою очередь запускает новый Activity, который показывает, что текст.
Смежные вопросы