我创建了一种永久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语音提示,但我希望转换后的字符串在启动之前传递给我的活动,就像在意图中使用额外的参数一样......
答案 0 :(得分:2)
使用"隐形" Activity
作为调解员。可以在没有UI的情况下进行活动,例如参见Emanuel Moecklin撰写的this SO post。因此,您可以像这样修改应用程序的流程:
Activity
启动并调用startActivityForResult()
以获取STT转换的结果Activity
启动并接受语音输入Activity
Activity
。