关于 android:onActivityResult 从不要求 Google Glass 上的语音 Intent
onActivityResult never called for speech Intent on Google Glass
我有一个带有多个选项的菜单 Activity。其中之一是使用 Glass 的语音到文本发布到新闻提要。我查看了 https://developers.google.com/glass/develop/gdk/input/voice#starting_the_speech_recognition_activity
并全部实现,但 onActivityResult 方法显然永远不会被调用。
在 Glass 设备上,我可以在菜单中选择"新帖子",然后会出现语音捕获。我可以和它说话,它会将我的语音转换为屏幕上的文本。但是在我接受它之后(通过点击或等待几秒钟),它就会退出并带我回到主屏幕。我需要能够在 onActivityResult 中获取语音文本字符串并调用另一个方法(displayPostMenu)来显示另一个菜单来处理文本,但如果从不调用 onActivityResult,我就不能这样做。
我已经查看了几个类似的问题,但没有一个解决方案有效/不适用...我认为我不能在 RecognizerIntent.ACTION_RECOGNIZE_SPEECH 上设置结果(),因为它是 Google 的?任何帮助将不胜感激!
我的一些代码:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
private final int SPEECH_REQUEST = 1;
//Code to make this Activity work and the menu open... @Override @Override public void displaySpeechRecognizer() { @Override |
你说这是一个"菜单活动",那么这是否意味着它是附加在一张实时卡片上的?
如果是这样,你是否覆盖 onOptionsMenuClosed 并在其中调用 finish?
如果是,菜单活动将在语音活动返回之前完成并自行销毁,因此结果将无处可返回。
解决此问题的一种方法是使用一个标志来指示您是否应该在菜单关闭时推迟对 finish 的调用,并根据该标志在 onOptionsMenuClosed 内有条件地进行调用。然后,在您的 displaySpeechRecognizer 方法中设置该标志并等到您的 onActivityResult 处理结束以调用 finish 代替。
这样的东西应该可以工作(未经测试编写,可能包含拼写错误):
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
private boolean shouldFinishOnMenuClose;
@Override shouldFinishOnMenuClose = true; // ... the rest of your code private void displaySpeechRecognizer() { shouldFinishOnMenuClose = false; // ... the rest of your code @Override if (shouldFinishOnMenuClose) { @Override // *Now* it's safe to finish the activity. Note that we do this finish(); |
相关讨论
- 你认为你可以举一个例子来说明如何做到这一点吗?我不完全确定该怎么做。