Car Messenger menawarkan kemampuan pesan yang didesain 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 dapat:
- Dapatkan pengalaman pengiriman pesan khusus.
- Luncurkan Car Messenger dari peluncur.
- Menjelajahi pesan yang diterima sebelum dan selama perjalanan.
- Mendengarkan dan membalas pesan.
- Nonaktifkan notifikasi pesan.
- Mulai percakapan baru.
Terminologi
Istilah berikut digunakan di halaman ini:
Manfaat aplikasi yang tidak digabungkan
Aplikasi yang tidak digabungkan, 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 telah diperbaiki)
- Mengupdate aplikasi melalui Google Play
Pelajari lebih lanjut aplikasi yang tidak tergabung.
Detail teknis
Bagian ini menjelaskan arsitektur Car Messenger. Untuk mempelajari lebih lanjut, lihat Mengintegrasikan dengan CarVoiceInteractionSession.
Arsitektur berbasis telepon
Saat disambungkan melalui Bluetooth, data disinkronkan dari database telepon ponsel ke database telepon mobil. Setelah koneksi Bluetooth terputus, data yang disinkronkan akan dihapus dari database teleponi mobil.
Kemampuan ini diperkenalkan di Android 12. Manfaat utama meliputi:
- Pesan pengguna massal dapat diambil dari database.
- Pesan dari perjalanan sebelumnya didukung.
- Menggunakan arsitektur dan API yang serupa untuk penyimpanan dan pengambilan SMS di ponsel Android.
- Sepenuhnya tidak terikat dari platform Android.
Berikut alurnya:
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 yang kami lakukan dengan data tersebut:
Gambar 2. Penanganan data Car Messenger.
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 ditransfer dari ponsel ke mobil menggunakan Bluetooth MAP.
- Saat koneksi diputus, data untuk ponsel tersebut akan dihapus dari database mobil.
Mendapatkan Car Messenger
Dapatkan commit Car Messenger terbaru dari Google Git.
API interaksi suara
Car Messenger menggunakan API CarVoiceInteractionSession untuk berintegrasi dengan asisten. Elemen-elemen ini dijelaskan di bagian-bagian selanjutnya.
Model PendingIntent
API ini menggunakan PendingIntent
untuk meneruskan kueri asisten yang telah diselesaikan kembali ke
Car Messenger.
Berikut ini adalah urutan kejadiannya:
Car Messenger meluncurkan asisten dengan memanggil
activity.showAssist(Bundle args)
. Argumen berisi tindakan API dan parameter yang diperlukan, yang berisi intent tertunda jika diperlukan.Asisten mengambil input pengguna jika diperlukan, dan menggabungkannya dengan intent yang tertunda.
Asisten mengirim intent kembali ke Car Messenger.
Car Messenger menyelesaikan tindakan API.
Tindakan API tandai sebagai sudah dibaca
Saat asisten membacakan pesan, PendingIntent
akan dikirim ke Car
Messenger 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
dikirim ke Car
Messenger 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.
Contoh kode:
/**
* 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 penulisan pesan saat penerima dipilih:
Gambar 3. Halaman Kontak di aplikasi Telepon.
Gambar ini menunjukkan cara menulis pesan saat tidak ada penerima yang dipilih menggunakan Pesan Baru:
Gambar 4. Tombol Pesan Baru di aplikasi Messenger.
Mengintegrasikan tindakan SMS Kirim Langsung
Berikut contoh integrasi Dialer dengan 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 ranah 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 cara men-debug Car Messenger.
Men-debug koneksi Bluetooth
Jalankan perintah
dumpsys
:adb shell dumpsys bluetooth_manager
- Cari
MapClientService
di output perintah dumpsys.
Profile: MapClientService mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
- Cari
Pastikan perangkat yang benar tercantum. Contoh:
Gambar 5. Daftar perangkat.
Jika tidak ada perangkat yang ditemukan, lakukan salah satu hal berikut:
- Sambungkan kembali ke Bluetooth.
ATAU
- Di Setelan Bluetooth, konfirmasi bahwa Pesan Teks aktif.
ATAU
- Di ponsel, pastikan Akses Pesan diberikan.
Men-debug database Bluetooth
Car Messenger dibangun di database telepon. 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 |
Hanya 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 SMS yang dikirim | adb shell content query --uri content://sms/sent |
Khusus kotak masuk SMS | adb shell content query --uri content://sms/conversations/inbox |
Pesan MMS bagian 1 (ganti 1 dengan ID MMS) |
adb shell content query --uri content://mms/part/1 |
Men-debug kueri Car Messenger dan asisten suara
Log dicetak secara default jika image build adalah eng
atau userdebug
.
Jika tidak, untuk mengaktifkan logging untuk Car Messenger:
Jalankan untuk tag yang relevan
adb shell setprop log.tag.<TAG> DEBUG
.Aktifkan logging untuk Asisten yang Sudah Dimuat.
Untuk bug yang sangat mudah direproduksi, pertimbangkan untuk menggunakan titik henti sementara dengan Android Studio.