- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个包含多个选项的菜单 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 上设置结果(),因为它是谷歌的?任何帮助将不胜感激!
我的一些代码:
private final int SPEECH_REQUEST = 1;
//Code to make this Activity work and the menu open...
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.view_feed:
//Stuff
return true;
case R.id.new_post:
Log.i("MainMenu", "Selected new_post");
displaySpeechRecognizer();
Log.i("MainMenu", "Ran displaySpeechRecog under new_post selection");
return true;
case R.id.stop:
Activity parent = getParent();
Log.i("MainMenu", "Closing activity; parent: " + parent + "; " + hashCode());
if (parent != null && parent.getApplication() == getApplication()) {
finish();
} else {
MainMenu.close();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onOptionsMenuClosed(Menu menu) {
// Nothing else to do, closing the Activity.
finish();
}
public void displaySpeechRecognizer() {
Log.i("MainMenu", "Entered displaySpeechRecognizer");
Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
startActivityForResult(speechIntent, SPEECH_REQUEST);
Log.i("MainMenu", "Finished displaySpeechRecognizer. startActivityForResult called.");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("MainMenu", "onActivityResult entered from MainMenu");
switch (requestCode) {
case SPEECH_REQUEST:
Log.i("MainMenu", "onActivityResult enters SPEECH_REQUEST case");
if (resultCode == RESULT_OK) {
Log.i("MainMenu", "onActivityResult enters RESULT_OK for voice cap");
List<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
String spokenText = results.get(0);
Log.i("MainMenu", "SpokenText:" + spokenText);
holdText = spokenText;
if (holdText != "") {
displayPostMenu();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
最佳答案
你说这是一个“菜单 Activity ”,那是否意味着它是附加到一张活卡上的?
如果是这样,您是否会覆盖 onOptionsMenuClosed
并在其中调用 finish
?
如果是,菜单 Activity 将在语音 Activity 返回之前完成并自行销毁,因此结果将无处返回。
解决此问题的一种方法是使用一个标志来指示您是否应该在菜单关闭时推迟对 finish
的调用,并在 onOptionsMenuClosed
中有条件地进行该调用> 基于那个标志。然后,在您的 displaySpeechRecognizer
方法中设置该标志,并等到 onActivityResult
处理结束后再调用 finish
。
像这样的东西应该可以工作(未经测试编写,可能包含拼写错误):
private boolean shouldFinishOnMenuClose;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// By default, finish the activity when the menu is closed.
shouldFinishOnMenuClose = true;
// ... the rest of your code
}
private void displaySpeechRecognizer() {
// Clear the flag so that the activity isn't finished when the menu is
// closed because it will close when the speech recognizer appears and
// there won't be an activity to send the result back to.
shouldFinishOnMenuClose = false;
// ... the rest of your code
}
@Override
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed();
if (shouldFinishOnMenuClose) {
finish();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SPEECH_REQUEST) {
if (resultCode == RESULT_OK) {
// process the speech
}
// *Now* it's safe to finish the activity. Note that we do this
// whether the resultCode is OK or something else (so the menu
// activity goes away even if the user swipes down to cancel
// the speech recognizer).
finish();
}
}
关于android - onActivityResult 从未在 Google Glass 上调用语音 Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21337093/
我想弄清楚 Glass 用户如何注册以接收特定的时间线项目?我创建了要推送的时间线项目和 Glassware/Mirror rest 服务,Glass 用户将如何注册我创建的服务。是否有 Glass
关于为设备开发一些 AR 应用程序,我想知道是否在任何地方指定和定义了玻璃上的虚拟屏幕和相机 View 之间的相对几何形状?也就是说,屏幕是否处于相对于相机视锥的固定、已知位置? 最佳答案 不,这些信
我正在尝试使用以下代码发送从 Glass 拍摄的图像... Intent emailIntent = new Intent( android.content.Intent.ACTION_SEND);
方法getLastLocation()来自 LocationManager通常返回 null 并且选择最佳提供者非常棘手。文档说: Warning: Do not use the LocationMa
今天的演示表明 Stackoverflow 上有支持,但我想知道是否有一个中心位置可以跟踪所有请求,以便我们关注和投票? 最佳答案 如果您对 Glass 开发套件有非常具体的要求,最好将其提交到 Gl
我浏览了网络,但没有找到任何关于 Google Glass 是否具有英语以外的其他语言的语音识别的信息?例如 Google Now 对瑞典语有很好的工作认可度。 还是需要自己实现一些第三方识别? 如果
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我查看了 api、stackoverflow 和 google,但没有找到任何东西。 API中有没有办法访问面向眼睛的相机?我希望能够判断用户的眼睛是睁着还是闭着……这个版本的 GDK 可以实现吗?
我们有一个现有的 Android 和 iOS 应用程序从我们的服务器使用 REST API。在使用移动应用程序的凭据(用户名、密码组合)登录后,API 会向经过身份验证的用户提供 token 。 现在
我正在探索谷歌眼镜。从开发指南中可以清楚地看出,要调用 Web 服务,我需要镜像 API。但在我看来,镜像 API 是一个帮助将卡片从远程位置插入 Glass 时间线的平台。 Mirror API 可
有没有使用头部运动平移图像的解决方案?即 'Meet the Team' easter egg .在复活节彩蛋上效果很好! 在 GDK 中有这个会很棒(提示 Google)。我有 found this
如何使用 GDK 检索有关 Google Glass 的信息,例如Google Glass 当前安装了哪个软件更新? 最佳答案 您可以通过 adb 执行此操作 adb shell getprop ro
在 Glass GDK 应用程序中获取相机时出现间歇性错误。该应用程序是一个简单的应用程序,它: 响应语音触发(“测试相机”) 启动一个事件来拍摄快照 返回调用Activity显示快照。 问题是该应用
我今天将 Glass 更新为 XE12。 我对在 GDK 中添加静态卡片 API 很着迷。 我能够发布静态卡片,但它不会自动聚焦。 用户必须滚动到它。 我做错了什么,或者这是 GDK 现在的限制? C
我想创建一些实用程序类以在 Android 手机和 Google Glass(使用 GDK)上使用。在 Glass 上运行时需要注意一些差异(例如获取位置)。 是否有一些可以使用的静态方法调用或另一种
我在这里运行了计时器、秒表和指南针示例: https://developers.google.com/glass/develop/gdk/quick-start#for_android_beginne
当我使用完整图像布局制作静态卡片时,看起来有一个阴影渐变,从底部到顶部从暗淡到清晰。这对于有文字的卡片来说非常有用,但如果我没有文字,我希望看到未经修改的图像。 Card card = new Car
使用GDK(或以其他方式)时,是否可以显示类似于在Glass上连接到WiFi网络时显示的进度指示器的进度指示器? (显示器底部的“旋转”线,类似于本视频结尾处的https://www.youtube.
在为“OK Glass...”注册菜单项时,我想知道如何为实际显示的内容提供不同的语义值。我举的例子是“OK Glass,找到 ATM”,Glass 很难识别,我认为这是因为它期待单词“ATM”而不是
对于我的基于 GDK 的应用程序,当用户点击“ok glass”屏幕并翻阅菜单项时,我如何指定要显示的字符串?例如该菜单中有“拍照”,但相应的语音触发字符串是“拍照”,正如我们在说出“ok glass
我是一名优秀的程序员,十分优秀!