Car Messenger cung cấp các tính năng nhắn tin được thiết kế cho thiết bị ô tô. Giống như các ứng dụng ô tô khác, người dùng khởi động Car Messenger từ trình chạy.
Tính năng mới trong Car Messenger
Với ứng dụng Car Messenger mới, người lái xe có thể:
- Tận hưởng trải nghiệm nhắn tin chuyên biệt.
- Chạy Car Messenger từ trình chạy.
- Duyệt xem các tin nhắn nhận được trước và trong khi lái xe.
- Nghe và trả lời tin nhắn.
- Tắt thông báo tin nhắn.
- Bắt đầu cuộc trò chuyện mới.
Thuật ngữ
Các thuật ngữ sau đây được sử dụng trên trang này:
Lợi ích của ứng dụng không theo gói
Các ứng dụng không theo gói, chẳng hạn như Car Messenger, mang lại những lợi ích sau:
- Chỉ sử dụng các phương thức công khai (không có phần phụ thuộc nền tảng trên các API ẩn)
- Phát triển ứng dụng bên ngoài nền tảng Android
- Bật các bản phát hành thường xuyên hơn (cho các tính năng mới và vấn đề đã khắc phục)
- Cập nhật ứng dụng thông qua Google Play
Tìm hiểu thêm về ứng dụng không theo gói.
Thông tin chi tiết về kỹ thuật
Phần này mô tả cấu trúc của Car Messenger. Để tìm hiểu thêm, hãy xem phần Tích hợp với CarVoiceInteractionSession.
Kiến trúc dựa trên điện thoại
Khi ghép nối qua Bluetooth, dữ liệu sẽ được đồng bộ hoá từ cơ sở dữ liệu điện thoại của điện thoại sang cơ sở dữ liệu điện thoại của ô tô. Khi ngắt kết nối Bluetooth, dữ liệu đã đồng bộ hoá sẽ bị xoá khỏi cơ sở dữ liệu điện thoại của ô tô.
Tính năng này được giới thiệu trong Android 12. Các lợi ích chính bao gồm:
- Bạn có thể truy xuất hàng loạt tin nhắn của người dùng từ cơ sở dữ liệu.
- Hệ thống hỗ trợ các thông báo từ các lần lái xe trước đó.
- Sử dụng một cấu trúc và API tương tự để lưu trữ và truy xuất tin nhắn SMS trên điện thoại Android.
- Được tách hoàn toàn khỏi nền tảng Android.
Dưới đây là quy trình:
Hình 1. Luồng dữ liệu dựa trên điện thoại.
Luồng được minh hoạ ở định dạng văn bản:
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.
Dưới đây là những việc chúng ta làm với dữ liệu:
Hình 2. Xử lý dữ liệu của Car Messenger.
Luồng được minh hoạ ở định dạng văn bản:
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.
- Khi kết nối, dữ liệu sẽ được chuyển từ điện thoại sang ô tô bằng Bluetooth MAP.
- Khi ngắt kết nối, dữ liệu của điện thoại đó sẽ bị xoá khỏi cơ sở dữ liệu của ô tô.
Tải Car Messenger
Nhận thay đổi mới nhất của Car Messenger từ Google Git.
API tương tác bằng giọng nói
Car Messenger sử dụng các API CarVoiceInteractionSession để tích hợp với trợ lý. Các phần tử này được mô tả trong các phần sau.
Mô hình PendingIntent
Các API này sử dụng PendingIntent
để chuyển các truy vấn trợ lý đã được giải quyết trở lại Car Messenger.
Đây là trình tự sự kiện:
Car Messenger chạy trợ lý bằng cách gọi
activity.showAssist(Bundle args)
. Args chứa hành động API và các tham số bắt buộc của hành động đó, chứa một ý định đang chờ xử lý nếu cần.Trợ lý sẽ truy xuất dữ liệu đầu vào của người dùng nếu cần và đóng gói dữ liệu đó bằng ý định đang chờ xử lý.
Trợ lý sẽ gửi ý định đó trở lại Car Messenger.
Car Messenger giải quyết hành động API.
Thao tác API đánh dấu là đã đọc
Khi Trợ lý đang đọc một tin nhắn, PendingIntent
sẽ được gửi đến Car Messenger với thao tác VOICE_ACTION_READ_NOTIFICATION
hoặc VOICE_ACTION_READ_CONVERSATION
để đánh dấu tin nhắn là đã đọc.
Thao tác API Trả lời trực tiếp
Khi trợ lý đang trả lời tin nhắn, PendingIntent
sẽ được gửi đến Car Messenger bằng thao tác VOICE_ACTION_REPLY_NOTIFICATION
và VOICE_ACTION_REPLY_CONVERSATION
để trả lời cuộc trò chuyện.
Hành động API Gửi tin nhắn SMS trực tiếp
Một gói có thao tác VOICE_ACTION_SEND_SMS
được gửi từ Car Messenger đến Trợ lý.
Mã mẫu:
/**
* 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”;
Hình ảnh này cho thấy cách soạn thư khi bạn chọn người nhận:
Hình 3. Trang Danh bạ trong ứng dụng Quay số.
Hình ảnh này cho thấy cách soạn thư khi bạn chưa chọn người nhận bằng cách sử dụng Thư mới:
Hình 4. Nút Tin nhắn mới trong ứng dụng Messenger.
Tích hợp thao tác Gửi tin nhắn SMS trực tiếp
Dưới đây là ví dụ về cách Trình quay số tích hợp VOICE_ACTION_SEND_SMS
, cung cấp các tham số không bắt buộc:
/**
* 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;
}
Các điểm cải tiến đối với TTR và tính năng Trả lời trực tiếp
API đã cập nhật hiện sử dụng một lớp Conversation
linh hoạt, cho phép các thao tác ngoài phạm vi thông báo và mở rộng chức năng trong ngữ cảnh của ứng dụng. Điều này thay thế yêu cầu trước đó về việc sử dụng lớp StatusBarNotification
.
Gỡ lỗi Car Messenger
Hãy xem các phần sau để tìm hiểu thêm về cách gỡ lỗi Car Messenger.
Gỡ lỗi kết nối Bluetooth
Chạy lệnh
dumpsys
:adb shell dumpsys bluetooth_manager
- Tìm
MapClientService
trong kết quả lệnh dumpsys.
Profile: MapClientService mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
- Tìm
Xác nhận rằng thiết bị bạn muốn thêm đã được liệt kê. Ví dụ:
Hình 5. Danh sách thiết bị.
Nếu không tìm thấy thiết bị nào, hãy làm một trong những việc sau:
- Kết nối lại với Bluetooth.
HOẶC
- Trong phần Cài đặt Bluetooth,hãy xác nhận rằng bạn đã bật Tin nhắn văn bản.
HOẶC
- Trên điện thoại, hãy xác nhận rằng bạn đã cấp quyền Truy cập vào tin nhắn.
Gỡ lỗi cơ sở dữ liệu Bluetooth
Car Messenger được xây dựng trên cơ sở dữ liệu điện thoại. Để xác định xem Bluetooth có đang điền sẵn cơ sở dữ liệu đó hay không, bạn có thể sử dụng các lệnh trong bảng.
Việc cần làm | Lệnh |
---|---|
Cuộc trò chuyện | adb shell content query--uri content://mms-sms/conversations?simple=true |
Chỉ tin nhắn SMS | adb shell content query--uri content://sms |
Tin nhắn MMS/SMS | adb shell content query--uri content://mms-sms/conversations |
Chỉ tin nhắn MMS | adb shell content query--uri content://mms |
Chỉ hộp thư đến MMS | adb shell content query--uri content://mms/conversations/inbox |
Chỉ gửi tin nhắn SMS | adb shell content query--uri content://sms/sent |
Chỉ hộp thư đến SMS | adb shell content query--uri content://sms/conversations/inbox |
Phần 1 của tin nhắn MMS (thay thế 1 bằng mã nhận dạng của MMS) |
adb shell content query--uri content://mms/part/1 |
Gỡ lỗi truy vấn của Trợ lý thoại và Car Messenger
Theo mặc định, nhật ký sẽ in nếu hình ảnh bản dựng là eng
hoặc userdebug
.
Nếu không, để bật tính năng ghi nhật ký cho Car Messenger, hãy làm như sau:
Chạy cho các thẻ có liên quan
adb shell setprop log.tag.<TAG> DEBUG
.Bật tính năng ghi nhật ký cho Trợ lý được tải trước.
Đối với các lỗi có thể tái hiện cao, hãy cân nhắc sử dụng điểm ngắt bằng Android Studio.