谷歌语音通知中的文字

时间:2016-09-22 08:30:53

标签: android android-intent notifications voice-recognition speech

我创建了一种永久notification,我的目标是这样的

1)用户点击notification
2)Google Speech to Text activity启动并接受语音输入
3)输入转换为文本,并启动一个新活动,显示该文本。

这是我到目前为止所尝试的内容 -

    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的{​​{1}}。

我能以任何方式实现这一目标吗?

修改1:

我可以开始一项新活动,然后打开语音Google语音提示,但我希望转换后的字符串在启动之前传递给我的活动,就像在意图中使用额外的参数一样......

1 个答案:

答案 0 :(得分:2)

使用"隐形" Activity作为调解员。可以在没有UI的情况下进行活动,例如参见Emanuel Moecklin撰写的this SO post。因此,您可以像这样修改应用程序的流程:

  • 用户点击通知
  • 没有UI的
  • Activity启动并调用startActivityForResult()以获取STT转换的结果
  • Google语音转语Activity启动并接受语音输入
  • 输入转换为文本并作为结果发送到无UI Activity
  • ...反过来又开始显示该文字的新Activity
相关问题