Это мои текущие ответы на эти вопросы. Это работает так в ряде приложений Google (Карты, Документы, YouTube, Прослушивание), которые все передают PendingIntent
в RecognizerIntent
, когда вы выполняете поиск с помощью кнопки микрофона. Хотя я не уверен, что это лучший (или самый общий) способ сделать это. Любые комментарии приветствуются.
Как лучше всего извлечь PendingIntent
из пачки?
Parcelable extraResultsPendingIntentAsParceable =
bundle.getParcelable(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT);
if (extraResultsPendingIntentAsParceable != null) {
if (extraResultsPendingIntentAsParceable instanceof PendingIntent) {
mExtraResultsPendingIntent =
(PendingIntent) extraResultsPendingIntentAsParceable;
} else {
// Report an error
}
}
mExtraResultsPendingIntentBundle =
bundle.getBundle(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT_BUNDLE);
Как добавить дополнения к набору существующих дополнений в PendingIntent
?
Здесь мы просто создаем новое намерение и помещаем в него все необходимые дополнения.
if (mExtraResultsPendingIntentBundle == null) {
mExtraResultsPendingIntentBundle = new Bundle();
}
Intent intent = new Intent();
intent.putExtras(mExtraResultsPendingIntentBundle);
// Unsure about the following line...
// Should I use another name for the extra data (instead of SearchManager.QUERY)
intent.putExtra(SearchManager.QUERY, speechRecognitionResult);
Как запустить модифицированный PendingIntent
?
Мы отправляем PendingIntent
, сообщая ему новое намерение (с новыми дополнениями) в качестве аргумента.
try {
mExtraResultsPendingIntent.send(this, 1234, intent);
} catch (CanceledException e) {
// Handle exception
}