【发布时间】:2015-09-22 17:32:19
【问题描述】:
就像this 问题(已接受的答案)一样,我正在尝试从我的应用程序的一个小部件启动语音识别。我成功地在 Widget 的 onUpdate() 方法中打开了请求语音输入的对话框:
// 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 没有被调用。为什么?
从系统日志中,我读到了这个:
...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 构造函数的第二个参数。第一个参数是 app 的包名(可以不同于内部 Java 包,但通常不是)。
-
谢谢@BladeCoder 我更新了代码但还是不行
-
您的小部件是集合小部件(ListView、StackView)吗?
标签: android android-widget speech-recognition android-pendingintent