原文链接:http://bbs.seacat.cn/thread-901-1-1.html
Glass可以让你声明语音命令,从ok glass 语音菜单中启动你的Glassware。![]() ![]() 你也可以调用语音识别的activity ![]() 已存在语音命令 当你在开发的时候,你可以使用任何你想要的语音指令。当你想要启动Glassware并出现在MyGlass中,你必须得使用已存在的命令或提交新命令审核。
启动Glassware 添加一个trigger到ok glass语音主菜单: 1、为你的voice trigger声明一个string变量的名称到res/values/strings.xml。可选择性的声明一个语音提示,在启动Glassware前显示在语音识别activity中
|
2、为 voice trigger创建一个xml资源到 res/xml/<my_voice_trigger>.xml
一个简单的voice trigger直接启动一个activity或一个service
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/glass_voice_trigger" />
3、注册一个action为 com.google.android.glass.action.VOICE_TRIGGER 的intent filter在manifest中。当检测到用户说出你的voice trigger时会启动这activity或service。
<?xml version="1.0" encoding="utf-8"?>
<application ...>
<activity | service ...>
<intent-filter>
<action
android:name="com.google.android.glass.action.VOICE_TRIGGER" />
</intent-filter>
<meta-data android:name="com.google.android.glass.VoiceTrigger"
android:resource="@xml/my_voice_trigger" />
</activity | service>
// ...
</application>
4、为activity或service设置一个android:icon属性,用来显示在ok,glass菜单中。
注意:图标必须是白色且背景透明,50*50像素。
<activity |service
android:icon="@drawable/my_icon" ...>
...
</activity | service>
5、当启动了一个activity,可以通过下面的代码得到转义的文字
ArrayList<String> voiceResults = getIntent().getExtras()
.getStringArrayList(RecognizerIntent.EXTRA_RESULTS);
当启动了一个服务,可以在 onStartCommand() 的回调中得到intent extra:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
ArrayList<String> voiceResults = intent.getExtras()
.getStringArrayList(RecognizerIntent.EXTRA_RESULTS);
// ...
}
设置约束
如果你需要使用相机、网络、麦克风这些功能,就需要在res/xml/<my_voice_trigger>.xml中指定他们。如果功能无效,Glass就会禁用这个 voice trigger:
<trigger keyword="@string/glass_voice_trigger">
<constraints
camera="true"
network="true" />
</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中接收转义文本,当用户停止说话的时候,这个回调会被调用。
private static final int SPEECH_REQUEST = 0;
private void displaySpeechRecognizer() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
startActivityForResult(intent, SPEECH_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == SPEECH_REQUEST && resultCode == RESULT_OK) {
List<String> results = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
String spokenText = results.get(0);
// Do something with spokenText.
}
super.onActivityResult(requestCode, resultCode, data);
}