谷歌眼镜GDK开发指南之语音输入

原文链接:http://bbs.seacat.cn/thread-901-1-1.html



Glass可以让你声明语音命令,从ok glass 语音菜单中启动你的Glassware。


080810nfbowfbsqfsf4lh4.png
080810a49d6z7r9q2zpwwn.png




你也可以调用语音识别的activity

080854rpnbbfi1l9b991rb.png






已存在语音命令


当你在开发的时候,你可以使用任何你想要的语音指令。当你想要启动Glassware并出现在MyGlass中,你必须得使用已存在的命令或提交新命令审核。



  • listen to

  • take a note

  • post an update

  • show a compass

  • start a run

  • start a bike ride

  • find a recipe

  • record a recipe

  • check me in

  • start a stopwatch

  • start a timer

  • start a round of golf

  • translate this

  • learn a song

  • tune an instrument

  • play a game

  • start a workout

注意:需要准确的声明这些语音命令(包括间隔符)到<trigger>元素中。







启动Glassware


添加一个trigger到ok glass语音主菜单:


1、为你的voice trigger声明一个string变量的名称到res/values/strings.xml。可选择性的声明一个语音提示,在启动Glassware前显示在语音识别activity中

[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <resources>  

  3.    <string name="glass_voice_trigger">take a note</string>  

  4.    <string name="glass_voice_prompt">tell me what's on your mind</string>  

  5. </resources>  


2、为voice trigger创建一个xml资源到res/xml/<my_voice_trigger>.xml
一个简单的voice trigger直接启动一个activity或一个service


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <trigger keyword="@string/glass_voice_trigger" />  



3、注册一个action为com.google.android.glass.action.VOICE_TRIGGER 的intent filter在manifest中。当检测到用户说出你的voice trigger时会启动这activity或service。


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <application ...>  

  3.    <activity | service ...>  

  4.        <intent-filter>  

  5.            <action  

  6.                android:name="com.google.android.glass.action.VOICE_TRIGGER" />  

  7.        </intent-filter>  

  8.        <meta-data android:name="com.google.android.glass.VoiceTrigger"

  9.            android:resource="@xml/my_voice_trigger" />  

  10.    </activity | service>  

  11. // ...

  12. </application>  




4、为activity或service设置一个android:icon属性,用来显示在ok,glass菜单中。


注意:图标必须是白色且背景透明,50*50像素。


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <activity |service  

  2.  android:icon="@drawable/my_icon" ...>  

  3.  ...  

  4. </activity | service>  




5、当启动了一个activity,可以通过下面的代码得到转义的文字


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ArrayList<String> voiceResults = getIntent().getExtras()  

  2.        .getStringArrayList(RecognizerIntent.EXTRA_RESULTS);  




当启动了一个服务,可以在 onStartCommand() 的回调中得到intent extra:


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. @Override

  2. publicint onStartCommand(Intent intent, int flags, int startId) {  

  3.    ArrayList<String> voiceResults = intent.getExtras()  

  4.            .getStringArrayList(RecognizerIntent.EXTRA_RESULTS);  

  5. // ...

  6. }  




设置约束


如果你需要使用相机、网络、麦克风这些功能,就需要在res/xml/<my_voice_trigger>.xml中指定他们。如果功能无效,Glass就会禁用这个voice trigger:


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <trigger keyword="@string/glass_voice_trigger">  

  2.    <constraints  

  3.        camera="true"

  4.        network="true" />  

  5. </trigger>  




启动语音识别activity




语音识别activity会等待用户说话,并在说完后返回转义的文本。启动这个activity:


1、通过 ACTION_RECOGNIZE_SPEECH intent来调用startActivityForResult()方法。支持以下intent extras :

EXTRA_PROMPT
EXTRA_RESULTS_PENDINGINTENT
EXTRA_RESULTS_PENDINGINTENT_BUNDLE




2、重写 onActivityResult() 回调方法,从 EXTRA_RESULTS intent extra中接收转义文本,当用户停止说话的时候,这个回调会被调用。


[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. privatestaticfinalint SPEECH_REQUEST = 0;  

  2. privatevoid displaySpeechRecognizer() {  

  3.    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);  

  4.    startActivityForResult(intent, SPEECH_REQUEST);  

  5. }  

  6. @Override

  7. protectedvoid onActivityResult(int requestCode, int resultCode,  

  8.        Intent data) {  

  9. if (requestCode == SPEECH_REQUEST && resultCode == RESULT_OK) {  

  10.        List<String> results = data.getStringArrayListExtra(  

  11.                RecognizerIntent.EXTRA_RESULTS);  

  12.        String spokenText = results.get(0);  

  13. // Do something with spokenText.

  14.    }  

  15. super.onActivityResult(requestCode, resultCode, data);  

  16. }  


你可能感兴趣的:(开发,Activity,谷歌,语音识别,listen)