Bergabunglah bersama kami di ⁠#Android11: The Beta Launch Show pada tanggal 3 Juni!

Menambahkan kemampuan 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 mendeklarasikannya seperti ikon peluncur. Pengguna mengucapkan "Mulai Nama Aplikasi Anda" untuk menggunakan voice action ini, dan aktivitas yang Anda tentukan akan dimulai.

Mendeklarasikan 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() ketika Anda ingin menghapus isyarat visual.

Misalnya, untuk perintah "Buat catatan", deklarasikan 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 "Ok Google, carikan taksi"

"Ok Google, teleponkan mobil"
Tindakan
com.google.android.gms.actions.RESERVE_TAXI_RESERVATION
Buat catatan "Ok Google, buat catatan"

"Ok Google, catatan untuk diri sendiri"
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 86400 (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 "Ok Google, mulai bersepeda"

"Ok Google, mulai bersepeda"

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

"Ok Google, mulai berlari"

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

"Ok Google, lacak olahraga saya"

"OK Google, berhenti olahraga"
Tindakan
vnd.google.fitness.TRACK
Jenis Mime
vnd.google.fitness.activity/other
Tambahan
actionStatus - string dengan nilai ActiveActionStatus saat mulai dan CompletedActionStatus saat berhenti
Menampilkan detak jantung "Ok 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 "Ok Google, berapa banyak langkah yang saya tempuh?"

"Ok 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.

Mendeklarasikan 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 harus 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.

Di aplikasi Anda, panggil startActivityForResult() menggunakan tindakan ACTION_RECOGNIZE_SPEECH. Tindakan ini akan memulai aktivitas pengenalan suara, dan Anda dapat 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: