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
.
中处理它
但我必须将我的意图传递到 pendingIntent
中 notification
。
我有什么办法可以做到这一点?
编辑 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
来显示该文本。
我创造了一种永久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
.
但我必须将我的意图传递到 pendingIntent
中 notification
。
我有什么办法可以做到这一点?
编辑 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
来显示该文本。