Как в this вопрос (принятый ответ), я пытаюсь запустить распознавание голоса из одного из виджетов моего приложения. Я успешно удалось открыть диалоговое окно, которое запрашивает голосовой ввод этого кода внутри onUpdate()
метода виджета:Android ожидающий намерения не вызывается внутри виджета
// this intent points to activity that should handle results, doesn't work
Intent activityIntent = new Intent(SoulissApp.getAppContext(), WrapperActivity.class);
//doesn't work as well
//activityIntent.setComponent(new ComponentName("it.angelic.soulissclient", "it.angelic.soulissclient.WrapperActivity"));
// this intent wraps results activity intent
PendingIntent resultsPendingIntent = PendingIntent.getActivity(SoulissApp.getAppContext(), 0, activityIntent, 0);
// this intent calls the speech recognition
Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
voiceIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
voiceIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
voiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
voiceIntent.putExtra(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT, resultsPendingIntent);
Bundle fakeBun = new Bundle();
fakeBun.putChar("fake", 'f');
voiceIntent.putExtra(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT_BUNDLE, fakeBun);
// this intent wraps voice recognition intent, works
PendingIntent pendingInt = PendingIntent.getActivity(context, 0, voiceIntent, 0);
updateViews.setOnClickPendingIntent(R.id.button1, pendingInt);
Распознавание речи работает, но в конце процесса распознавания, мой resultsPendingIntent
не называется. Зачем?
Из журнала SYS, я прочитал это:
...I/ActivityManager﹕ START u0 {cmp=it.angelic.soulissclient/.SoulissWidgetVoice (has extras)} from uid 10152 on display 0......
в то время как я ожидал что-то вроде:
...I/ActivityManager﹕ START u0 {cmp=it.angelic.soulissclient/.WrapperActivity(has extras)}...
потому что .WrapperActivity
находится на рассмотрении в то время как Intent SoulissWidgetVoice
класс виджета. Обратите внимание, что WrapperActivity
само по себе может быть правильно запущен от других видов деятельности, и это Theme.NoDisplay
основная деятельность:
<activity
android:name=".WrapperActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay"/>
Я думаю, что вам нужно, чтобы обеспечить полное имя класса с его префиксом пакета в качестве второго аргумента для конструктора ComponentName. Первый аргумент - это имя пакета приложения (которое может отличаться от внутреннего пакета Java, но обычно это не так). – BladeCoder
спасибо @BladeCoder i обновил код, но все еще не работает – Shine
Является ли ваш виджет коллекционным виджетами (ListView, StackView)? –