Menambahkan kapabilitas suara

Voice action adalah bagian penting dari pengalaman wearable. Dengan fitur ini, pengguna dapat melakukan tindakan dengan cepat dan handsfree. Wear OS by Google menyediakan dua jenis voice action:

Bawaan sistem
Voice action ini berbasis tugas dan tertanam dalam platform Wear. Anda memfilter aktivitas yang ingin Anda mulai saat voice action diucapkan. Contohnya meliputi "Buat catatan" atau "Setel alarm".
Bawaan aplikasi
Voice action ini berbasis aplikasi, dan Anda menyatakannya seperti ikon peluncur. Pengguna mengucapkan "Mulai Nama Aplikasi Anda" untuk menggunakan voice action ini, dan aktivitas yang Anda tentukan akan dimulai.

Menyatakan voice action bawaan sistem

Platform Wear OS menyediakan beberapa intent suara yang didasarkan pada tindakan pengguna, seperti "Buat catatan" atau "Setel alarm". Hal ini memungkinkan pengguna untuk mengucapkan apa yang ingin mereka lakukan, dan sistem akan menentukan aktivitas terbaik untuk dimulai.

Saat pengguna mengucapkan voice action, aplikasi Anda dapat memfilter intent yang akan dipicu untuk memulai suatu aktivitas. Jika Anda ingin memulai suatu layanan untuk melakukan sesuatu di latar belakang, tampilkan aktivitas sebagai isyarat visual dan mulai layanan dalam aktivitas tersebut. Pastikan untuk memanggil finish() saat Anda ingin menghapus isyarat visual.

Misalnya, untuk perintah "Buat catatan", nyatakan filter intent ini untuk memulai aktivitas yang bernama MyNoteActivity:

      <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>
    

Berikut adalah daftar intent suara yang didukung oleh platform Wear:

Nama Contoh Frasa Intent
Menelepon mobil/taksi "Oke Google, carikan taksi"

"Oke Google, panggilkan mobil"
Tindakan
com.google.android.gms.actions.RESERVE_TAXI_RESERVATION
Membuat catatan "Oke Google, buat catatan"

"Oke Google, catat pengingat"
Tindakan
android.intent.action.SEND
Kategori
com.google.android.voicesearch.SELF_NOTE
Tambahan
android.content.Intent.EXTRA_TEXT - string dengan isi catatan
Menyetel alarm "Oke Google, setel alarm untuk jam 8 pagi"

"Oke Google, bangunkan saya jam 6 besok"
Tindakan
android.intent.action.SET_ALARM
Tambahan
android.provider.AlarmClock.EXTRA_HOUR - bilangan bulat dengan jam alarm.

android.provider.AlarmClock.EXTRA_MINUTES - bilangan bulat dengan menit alarm

(2 tambahan ini opsional, keduanya tidak disediakan)

Menyetel timer "Oke Google, setel timer selama 10 menit"
Tindakan
android.intent.action.SET_TIMER
Tambahan
android.provider.AlarmClock.EXTRA_LENGTH - bilangan bulat dalam rentang 1 sampai 86.400 (jumlah detik dalam 24 jam) yang mewakili durasi timer
Memulai stopwatch "Oke Google, mulai stopwatch"
Tindakan
com.google.android.wearable.action.STOPWATCH
Mulai/Berhenti bersepeda "Oke Google, mulai bersepeda"

"Oke Google, mulai bersepeda"

"Oke Google, berhenti bersepeda"
Tindakan
vnd.google.fitness.TRACK
Jenis Mime
vnd.google.fitness.activity/biking
Tambahan
actionStatus - string dengan nilai ActiveActionStatus saat memulai dan CompletedActionStatus saat berhenti.
Mulai/Berhenti berlari "Oke Google, lacak lari saya"

"Oke Google, mulai berlari"

"Oke Google, berhenti berlari"
Tindakan
vnd.google.fitness.TRACK
Jenis Mime
vnd.google.fitness.activity/running
Tambahan
actionStatus - string dengan nilai ActiveActionStatus saat memulai dan CompletedActionStatus saat berhenti
Mulai/Berhenti olahraga "Oke Google, mulai olahraga"

"Oke Google, lacak olahraga saya"

"Oke Google, berhenti olahraga"
Tindakan
vnd.google.fitness.TRACK
Jenis Mime
vnd.google.fitness.activity/other
Tambahan
actionStatus - string dengan nilai ActiveActionStatus saat memulai dan CompletedActionStatus saat berhenti
Menampilkan detak jantung "Oke Google, berapa detak jantung saya?"

"Oke Google, berapa bpm saya?"
Tindakan
vnd.google.fitness.VIEW
Jenis Mime
vnd.google.fitness.data_type/com.google.heart_rate.bpm
Menampilkan jumlah langkah "Oke Google, berapa banyak langkah yang saya tempuh?"

"Oke Google, berapa banyak langkah saya?"
Tindakan
vnd.google.fitness.VIEW
Jenis Mime
vnd.google.fitness.data_type/com.google.step_count.cumulative

Untuk dokumentasi tentang cara mendaftar untuk intent platform dan mengakses informasi tambahan yang terdapat di dalamnya, lihat Intent umum.

Menyatakan voice action bawaan aplikasi

Jika tidak ada intent suara platform yang berfungsi, Anda dapat memulai aplikasi secara langsung dengan voice action "Mulai MyActivityName".

Mendaftarkan untuk tindakan "Mulai" sama dengan mendaftar untuk ikon peluncur di ponsel. Namun aplikasi Anda tidak meminta ikon aplikasi di peluncur, melainkan meminta voice action.

Untuk menentukan teks yang diucapkan setelah "Mulai", tentukan atribut label untuk aktivitas yang ingin Anda mulai. Misalnya, filter intent ini mengenali voice action "Mulai MyRunningApp" dan meluncurkan 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>
    

Mendapatkan input lisan format bebas

Selain menggunakan voice action untuk meluncurkan aktivitas, Anda juga dapat memanggil aktivitas Speech Recognizer bawaan sistem untuk mendapatkan input lisan dari pengguna. Cara ini berguna untuk mendapatkan input dari pengguna lalu memprosesnya, seperti melakukan penelusuran atau mengirimkan penelusuran sebagai pesan.

Pada aplikasi Anda, panggil startActivityForResult() menggunakan tindakan ACTION_RECOGNIZE_SPEECH. Aktivitas pengenalan ucapan akan dimulai, dan Anda bisa menangani hasilnya di onActivityResult().

Kotlin

    private const val SPEECH_REQUEST_CODE = 0
    ...
    // Create an intent that can start the Speech Recognizer activity
    private fun displaySpeechRecognizer() {
        val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
            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 fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        if (requestCode == SPEECH_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            val spokenText: String? =
                    data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS).let { results ->
                        results[0]
                    }
            // Do something with spokenText
        }
        super.onActivityResult(requestCode, resultCode, data)
    }
    

Java

    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);
    }
    

Lihat juga referensi terkait berikut ini: