W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫: kesenhoo - 原文: http://developer.android.com/training/wearables/apps/voice.html
語(yǔ)音指令是可穿戴體驗(yàn)的一個(gè)重要的部分。這使得用戶可以釋放雙手,快速發(fā)出指令。穿戴提供了2種類型的語(yǔ)音操作:
系統(tǒng)提供的
這些語(yǔ)音指令都是基于任務(wù)的,并且內(nèi)置在Wear的平臺(tái)內(nèi)。我們?cè)赼ctivity中過(guò)濾我們想要接收的指令。例如包含"Take a note" 或者 "Set an alarm"的指令。
應(yīng)用提供的
這些語(yǔ)音指令都是基于應(yīng)用的,我們需要像聲明一個(gè)Launcher Icon一樣聲明這些指令。用戶通過(guò)說(shuō)"Start "來(lái)使用那些語(yǔ)音指令,然后會(huì)啟動(dòng)我們指定啟動(dòng)的activity。
Android Wear平臺(tái)基于用戶的操作提供了一些語(yǔ)音指令,例如"Take a note" 或者 "Set an alarm"。用戶發(fā)出想要做的操作指令,讓系統(tǒng)啟動(dòng)最合適的activity。
當(dāng)用戶說(shuō)出語(yǔ)音指令時(shí),我們的應(yīng)用能夠過(guò)濾出用于啟動(dòng)activity的intent。如果我們想要啟動(dòng)一個(gè)在后臺(tái)執(zhí)行任務(wù)的service,需要顯示一個(gè)activity作為視覺(jué)線索,并且在該activity中啟動(dòng)service。當(dāng)我們想要廢棄這個(gè)視覺(jué)線索時(shí),需要確保執(zhí)行了finish()。
例如,對(duì)于"Take a note"的指令,聲明下面這個(gè)intent filter來(lái)啟動(dòng)一個(gè)名為MyNoteActivity
的activity:
<activity android:name="MyNoteActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="com.google.android.voicesearch.SELF_NOTE" />
</intent-filter>
</activity>
下面列出了Wear平臺(tái)支持的語(yǔ)音指令:
關(guān)于注冊(cè)intent與獲取intent extra的信息,請(qǐng)參考Common intents.
如果系統(tǒng)提供的語(yǔ)音指令無(wú)法滿足我們的需求,我們可以使用"Start MyActivityName"語(yǔ)音指令來(lái)直接啟動(dòng)我們的應(yīng)用。
注冊(cè)一個(gè)"Start"指令的方法和注冊(cè)手持應(yīng)用上的Launcher Icon是一樣的。除了在launcher里面需要一個(gè)應(yīng)用圖標(biāo),而我們的應(yīng)用需要一個(gè)語(yǔ)音指令。
為了指定在"Start"指令之后需要說(shuō)出的文本, 我們需要指定想要啟動(dòng)的activity的label
屬性。例如,下面的intent filter能夠識(shí)別"Start MyRunningApp"語(yǔ)音指令并啟動(dòng)StartRunActivity
。
<application>
<activity android:name="StartRunActivity" android:label="MyRunningApp">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
除了使用語(yǔ)音指令來(lái)啟動(dòng)activity之外,我們也可以執(zhí)行系統(tǒng)內(nèi)置的語(yǔ)言識(shí)別activity來(lái)獲取用戶的語(yǔ)音輸入。這對(duì)于獲取用戶的輸入信息非常有幫助,例如執(zhí)行搜索或者發(fā)送一個(gè)消息。
在我們的應(yīng)用中,使用ACTION_RECOGNIZE_SPEECH action并調(diào)用startActivityForResult()。這樣可以啟動(dòng)系統(tǒng)語(yǔ)音識(shí)別應(yīng)用,并且我們可以在onActivityResult()中處理返回的結(jié)果:
private static final int SPEECH_REQUEST_CODE = 0;
// Create an intent that can start the Speech Recognizer activity
private void displaySpeechRecognizer() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// Start the activity, the intent will be populated with the speech text
startActivityForResult(intent, SPEECH_REQUEST_CODE);
}
// This callback is invoked when the Speech Recognizer returns.
// This is where you process the intent and extract the speech text from the intent.
@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);
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: