Google 从通知到文本的语音

Google Speech to Text from Notification

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

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

这是我到目前为止尝试过的方法--

    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);

现在我知道我可以使用 startActivityForResult(resultIntent, REQ_CODE_SPEECH_INPUT); 正常处理识别器 Intent 的结果,并在我的 activity.

中处理它

但我必须将我的意图传递到 pendingIntentnotification

我有什么办法可以做到这一点?

编辑 1:

我可以开始一个新的activity,然后打开语音Google语音提示,但是我希望在开始之前将转换后的字符串传递给我的activity,比如意图中的额外参数...

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

  • 用户点击通知
  • Activity 没有 UI 启动并调用 startActivityForResult() 以获得 STT 转换的结果
  • Google Speech to Text Activity 启动并进行语音输入
  • 输入被转换为文本并作为结果发送到 UI-less Activity
  • ... 这又会启动一个新的 Activity 来显示该文本。