Messenger Mobil

Car Messenger menawarkan kemampuan pesan yang dirancang untuk perangkat otomotif. Seperti aplikasi mobil lainnya, pengguna memulai Car Messenger dari peluncur.

Apa yang baru di Car Messenger?

Dengan aplikasi Car Messenger baru, pengemudi:

  • Dapatkan pengalaman pesan khusus.
  • Luncurkan Messenger Mobil dari peluncur.
  • Menjelajahi pesan yang diterima sebelum dan selama perjalanan.
  • Mendengarkan dan membalas pesan.
  • Membisukan notifikasi pesan.
  • Memulai percakapan baru.

Terminologi

Istilah-istilah berikut digunakan di halaman ini:

Ketuk untuk Membaca (TTR)
Ketuk untuk Membaca memungkinkan asisten suara membaca dan membalas pesan teks atas nama pengguna tersebut, saat pengguna berinteraksi dengan notifikasi pesan.

Balasan Langsung
Mirip dengan Ketuk untuk Membaca, kecuali asisten suara tidak membacakan pesan dan langsung memberikan perintah untuk membalas.

Kirim Langsung
Berintegrasi dengan asisten suara untuk menulis alur pesan baru dengan atau tanpa kontak yang ditentukan.

Manfaat aplikasi yang tidak dipaketkan

Aplikasi yang tidak dipaketkan, seperti Car Messenger, memberikan keuntungan berikut:

  • Hanya menggunakan metode publik (tidak ada dependensi platform pada API tersembunyi)
  • Mengembangkan aplikasi di luar platform Android
  • Mengaktifkan rilis yang lebih sering (untuk fitur baru dan masalah yang diperbaiki)
  • Mengupdate aplikasi melalui Google Play

Pelajari lebih lanjut aplikasi yang tidak dipaketkan.

Detail teknis

Bagian ini menjelaskan arsitektur Car Messenger. Untuk mempelajari lebih lanjut, lihat Mengintegrasikan dengan CarVoiceInteractionSession.

Arsitektur berbasis telefoni

Saat disambungkan melalui Bluetooth, data disinkronkan dari database telekomunikasi ponsel ke database telekomunikasi mobil. Setelah koneksi Bluetooth terputus, data yang disinkronkan akan dihapus dari database telekomunikasi mobil.

Kemampuan ini diperkenalkan di Android 12. Manfaat utamanya meliputi:

  • Pesan pengguna massal dapat diambil dari database.
  • Pesan dari sesi berkendara sebelumnya didukung.
  • Menggunakan arsitektur dan API yang serupa untuk penyimpanan dan pengambilan SMS di ponsel Android.
  • Menjadi sepenuhnya terpisah dari platform Android.

Berikut alur kerjanya:

Aliran data berbasis telepon Gambar 1. Aliran data berbasis telepon.

Alur yang diilustrasikan dalam format teks:

 1. Phone connects to car.
    |
    --> 2. SMS data transferred from phone's database to car database.
          |
          --> 3. Car Messenger retrieves data from telephony database to display on UI.
                  |
                  --> 4. User interactions prompt the voice assistant.
                  |
          <-- 5. Car Messenger receives reply action from the voice assistant.
          |
    <-- 6. SMS is marked as read in car database.
    |
 7. Reply transmitted to recipients, phone database updated with reply and read status.

Berikut ini yang kami lakukan dengan data tersebut:

Penggunaan data Messenger Mobil Gambar 2. Penanganan data Messenger Mobil.

Alur yang diilustrasikan dalam format teks:

 1. Phone connects to car.
    |
    --> 2. SMS data transferred from phone's database to car database.
          |
          --> 3. Phone disconnects from car.
                  |
                  --> 4. SMS data deleted from car telephony database.
  • Saat terhubung, data akan ditransfer dari ponsel ke mobil menggunakan MAP Bluetooth.
  • Saat koneksi terputus, data untuk ponsel tersebut akan dihapus dari database mobil.

Mendapatkan Messenger Mobil

Dapatkan commit Car Messenger terbaru dari Google Git.

API interaksi suara

Car Messenger menggunakan CarVoiceInteractionSession API untuk berintegrasi dengan asisten. Elemen-elemen ini dijelaskan di bagian-bagian selanjutnya.

Model PendingIntent

API ini menggunakan PendingIntent untuk meneruskan kueri asisten yang di-resolve kembali ke Messenger Mobil.

Berikut ini adalah urutan kejadiannya:

  1. Messenger Mobil meluncurkan asisten dengan memanggil activity.showAssist(Bundle args). Argumen berisi tindakan API dan parameter yang diperlukan, yang berisi intent tertunda jika diperlukan.

  2. Asisten mengambil input pengguna jika diperlukan, dan mengemasnya dengan intent yang tertunda.

  3. Asisten mengirim intent kembali ke Car Messenger.

  4. Car Messenger me-resolve tindakan API.

Tindakan API tandai sebagai telah dibaca

Saat asisten membaca pesan, PendingIntent akan dikirim ke Messenger Mobil dengan tindakan VOICE_ACTION_READ_NOTIFICATION atau VOICE_ACTION_READ_CONVERSATION untuk menandai pesan sebagai telah dibaca.

Tindakan Direct Reply API

Saat asisten membalas pesan, PendingIntent akan dikirim ke Messenger Mobil dengan tindakan VOICE_ACTION_REPLY_NOTIFICATION dan VOICE_ACTION_REPLY_CONVERSATION untuk membalas percakapan.

Tindakan Direct Send SMS API

Paket dengan tindakan VOICE_ACTION_SEND_SMS dikirim dari Car Messenger ke asisten.

Kode contoh:

/**
 *   KEY_PHONE_NUMBER - Recipient’s phone number. If this and the recipients name are not
 *   provided by the application, assistant must do contact disambiguation but is not required
 *   to add the name to the PendingIntent.
 *
 *   KEY_RECIPIENT_NAME - Recipient’s name. If this and the recipient phone number are not
 *   provided by the application, assistant must do contact disambiguation but is not required
 *   to add the name to the PendingIntent.
 *
 *   KEY_RECIPIENT_UID - Recipient’s UID in the ContactProvider database. Optionally provided
 *   by the application. Not required to be sent back by the assistant.
 *
 *   KEY_DEVICE_NAME - Friendly name of the device in which to send the message from. If not
 *   provided by the application, assistant must do device disambiguation but is not required
 *   to add it to PendingIntent. In V1 this is required to be sent by the application.
 *
 *   KEY_DEVICE_ADDRESS - Bluetooth device address of the device in which to send the message
 *   from. If not provided by the application, assistant must do device disambiguation and add
 *   this to the PendingIntent. In V1 this is required to be sent by the application.
 *
 *   KEY_SEND_PENDING_INTENT - @NotNull Will always be provided by the application. The
 *   application must preload the pending intent with any KEYs it provides the assistant that
 *   is also needed to send the message. (I.e if the application passes in the
 *   KEY_PHONE_NUMBER in the Bundle, the assistant can assume the application has already put
 *   this in the PendingIntent and may not re-add it to the PendingIntent).
 *
 */
public static final String KEY_PHONE_NUMBER = “KEY_PHONE_NUMBER”;
public static final String KEY_RECIPIENT_NAME = “KEY_RECIPIENT_NAME”;
public static final String KEY_RECIPIENT_UID = “KEY_RECIPIENT_UID”;
public static final String KEY_DEVICE_NAME = “KEY_DEVICE_NAME”;
public static final String KEY_DEVICE_ADDRESS = “KEY_DEVICE_NAME”;
public static final String KEY_SEND_PENDING_INTENT =”KEY_SEND_PENDING_INTENT”;

Gambar ini menunjukkan cara menulis pesan saat penerima dipilih:

Halaman Kontak aplikasi Telepon Gambar 3. Halaman Kontak di aplikasi Telepon.

Gambar ini menunjukkan cara menulis pesan saat tidak ada penerima yang dipilih menggunakan Pesan Baru:

Tidak ada penerima yang dipilih Gambar 4. Tombol Pesan Baru di aplikasi Messenger.

Mengintegrasikan tindakan SMS Kirim Langsung

Berikut adalah contoh Dialer yang mengintegrasikan VOICE_ACTION_SEND_SMS, yang menyediakan parameter opsional:

    /**
     * Build the {@link Bundle} to pass to assistant to send a sms.
     */
    public Bundle buildDirectSendBundle(String number, String name, String uid,
                                        BluetoothDevice device) {
        Bundle bundle = new Bundle();
        bundle.putString(CarVoiceInteractionSession.KEY_ACTION, VOICE_ACTION_SEND_SMS);
        // start optional parameters
        bundle.putString(CarVoiceInteractionSession.KEY_PHONE_NUMBER, number);
        bundle.putString(CarVoiceInteractionSession.KEY_RECIPIENT_NAME, name);
        bundle.putString(CarVoiceInteractionSession.KEY_RECIPIENT_UID, uid);
        // end optional parameters
        bundle.putString(CarVoiceInteractionSession.KEY_DEVICE_ADDRESS, device.getAddress());
        bundle.putString(CarVoiceInteractionSession.KEY_DEVICE_NAME,
                DialerUtils.getDeviceName(mContext, device));
        Intent intent = new Intent(mContext, MessagingService.class)
                .setAction(ACTION_DIRECT_SEND)
                .setClass(mContext, MessagingService.class);

        int requestCode = ACTION_DIRECT_SEND.hashCode();
        PendingIntent pendingIntent = PendingIntent.getForegroundService(
                mContext, requestCode, intent,
                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);

        bundle.putParcelable(KEY_SEND_PENDING_INTENT, pendingIntent);
        return bundle;
    }

Peningkatan pada TTR dan Balasan Langsung

API yang diperbarui kini menggunakan class Conversation yang serbaguna, yang memungkinkan operasi di luar wilayah notifikasi dan memperluas kemampuan dalam konteks aplikasi. Hal ini menggantikan persyaratan sebelumnya untuk menggunakan class StatusBarNotification.

Debug Car Messenger

Lihat bagian berikut untuk mempelajari lebih lanjut proses debug Car Messenger.

Men-debug koneksi Bluetooth

  1. Jalankan perintah dumpsys:

    adb shell dumpsys bluetooth_manager
    
    • Telusuri MapClientService di output perintah dumpsys.
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. Pastikan perangkat yang benar tercantum. Contoh:

    Daftar perangkat Gambar 5. Daftar perangkat.

  3. Jika tidak ada perangkat yang ditemukan, lakukan salah satu tindakan berikut:

    • Hubungkan kembali ke Bluetooth.

    ATAU

    • Di Setelan Bluetooth, pastikan Pesan Teks aktif.

    ATAU

    • Di ponsel, pastikan Akses Pesan diberikan.

Men-debug database Bluetooth

Car Messenger dibuat di database telephony. Untuk menentukan apakah Bluetooth mengisi database tersebut, Anda dapat menggunakan perintah dalam tabel.

Tugas Perintah
Percakapan adb shell content query--uri content://mms-sms/conversations?simple=true
Khusus pesan SMS adb shell content query--uri content://sms
Pesan MMS/SMS adb shell content query--uri content://mms-sms/conversations
Khusus pesan MMS adb shell content query--uri content://mms
Khusus kotak masuk MMS adb shell content query--uri content://mms/conversations/inbox
Hanya pesan yang dikirim melalui SMS adb shell content query--uri content://sms/sent
Khusus kotak masuk SMS adb shell content query--uri content://sms/conversations/inbox
Bagian 1 pesan MMS
(ganti 1 dengan ID MMS)
adb shell content query--uri content://mms/part/1

Men-debug kueri Messenger Mobil dan asisten suara

Log dicetak secara default jika image build adalah eng atau userdebug. Atau, untuk mengaktifkan logging untuk Messenger Mobil:

  1. Jalankan untuk tag yang relevan adb shell setprop log.tag.<TAG> DEBUG.

  2. Aktifkan logging untuk Asisten yang Dimuat Sebelumnya.

  3. Untuk bug yang sangat dapat direproduksi, pertimbangkan untuk menggunakan titik henti sementara dengan Android Studio.