Skip to content

Most visited

Recently visited

navigation

添加语音功能

语音操作是穿戴式设备体验的重要组成部分。用户可通过语音操作快速地以免提方式执行操作。Wear 提供两种语音操作:

系统提供的语音操作
这些语音操作基于任务并内置于 Wear 平台。讲述语音操作时,在您要启动的 Activity 中过滤它们。例如,“请做笔记”或“设置闹铃”。
应用提供的语音操作
这些语音操作基于应用,并且您可以像声明启动图标一样声明它们。用户说“开始” 即可使用这些语音操作以及您指定启动的 Activity。

声明系统提供的语音操作

Android Wear 平台提供多个基于用户操作的语音 Intent,例如,“请做笔记”或“设置闹铃”等。这将允许用户说出他们想要执行的操作,并让系统确定要启动的最佳 Activity。

当用户说出语音操作时,您的应用可以过滤触发启动 Activity 的 Intent。如果您要启动一个 Service 以在后台执行某项操作,可显示一个 Activity 作为可视化线索,并在此 Activity 中启动该 Service。如果您想去除可视化线索,请务必调用 finish()

例如,对于“请做笔记”命令,声明此 Intent 过滤器以启动一个名为 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 平台支持的语音 Intent 列表:

名称 示例语句 Intent
叫一台车/叫一台出租车 “OK Google,给我叫一台出租车”

“OK Google,给我叫一台车”
操作
com.google.android.gms.actions.RESERVE_TAXI_RESERVATION
请做笔记 “OK Google,请做笔记”

“OK Google,给我提醒”
操作
android.intent.action.SEND
类别
com.google.android.voicesearch.SELF_NOTE
Extra
android.content.Intent.EXTRA_TEXT - 带有笔记正文的字符串
设置闹铃 “OK Google,设置一个上午 8 点的闹铃”

“OK Google,明天 6 点唤醒我”
操作
android.intent.action.SET_ALARM
Extra
android.provider.AlarmClock.EXTRA_HOUR - 一个整数,表示闹铃的小时。

android.provider.AlarmClock.EXTRA_MINUTES - 一个整数,表示闹铃的分钟。

(这 2 个 Extra 都是可选的,要么不提供要么都提供)

设置定时器 “Ok Google,设置 10 分钟定时器”
操作
android.intent.action.SET_TIMER
Extra
android.provider.AlarmClock.EXTRA_LENGTH - 1 到 86400(24 小时的秒数)之间的一个整数,表示定时器的时长
启动跑步秒表 “Ok Google,启动跑步秒表”
操作
com.google.android.wearable.action.STOPWATCH
开始/停止骑行 “OK Google,开始骑行”

“OK Google,开始我的骑行”

“OK Google,停止骑行”
操作
vnd.google.fitness.TRACK
MIME 类型
vnd.google.fitness.activity/biking
Extra
actionStatus - 一个字符串,在开始时具有值 ActiveActionStatus,在停止时具有值 CompletedActionStatus
开始/停止跑步 “OK Google,跟踪我的跑步”

“OK Google,开始跑步”

“OK Google,停止跑步”
操作
vnd.google.fitness.TRACK
MimeType
vnd.google.fitness.activity/running
Extra
actionStatus - 一个字符串,在开始时具有值 ActiveActionStatus,在停止时具有值 CompletedActionStatus
开始/停止健身 “OK Google,开始锻炼”

“OK Google,跟踪我的锻炼”

“OK Google,停止锻炼”
操作
vnd.google.fitness.TRACK
MimeType
vnd.google.fitness.activity/other
Extra
actionStatus - 一个字符串,在开始时具有值 ActiveActionStatus,在停止时具有值 CompletedActionStatus
显示心率 “Ok Google,我的心率是多少?”

“Ok Google,我的 bpm 是多少?”
操作
vnd.google.fitness.VIEW
MIME 类型
vnd.google.fitness.data_type/com.google.heart_rate.bpm
显示步数 “Ok Google,我走了多少步?”

“Ok Google,我的步数是多少?”
操作
vnd.google.fitness.VIEW
MIME 类型
vnd.google.fitness.data_type/com.google.step_count.cumulative

有关注册平台 Intent 和访问其中包含的 Extra 信息的文档,请参阅常用 Intent

声明应用提供的语音操作

如果没有适合您的平台语音 Intent,您可以通过“Start MyActivityName”语音操作直接启动您的应用。

在手持式设备上,注册“启动”操作与注册启动图标相同。但不是请求启动器中的应用图标,而是由您的应用请求一个语音操作。

要指定“启动”后讲述的文本,可针对您想要启动的 Activtiy 指定一个 label 属性。例如,以下 Intent 过滤器可识别“Start MyRunningApp”语音操作并启动 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>

获取自由格式的语音输入

除使用语音操作启动 Activity 外,您还可以调用系统的内置语音识别 Activity 以获取用户的语音输入。这对于从用户获取输入,然后进行处理(如执行搜索或将其作为消息发送)非常有用。

在您的应用中,使用 ACTION_RECOGNIZE_SPEECH 操作调用 startActivityForResult()。这将启动语音识别 Activity,然后,您可以在 onActivityResult() 中处理结果。
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_CODE && 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);
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)