پیامرسان خودرو قابلیتهای پیامرسانی طراحیشده برای دستگاههای خودرو را ارائه میدهد. مانند سایر برنامههای خودرو، کاربران پیامرسان خودرو را از لانچر اجرا میکنند.
چه چیزهایی در پیامرسان خودرو جدید است؟
با برنامه جدید Car Messenger، رانندگان:
- یک تجربه پیامرسانی اختصاصی داشته باشید.
- پیامرسان خودرو را از لانچر اجرا کنید.
- پیامهای دریافتی قبل و در حین رانندگی را مرور کنید.
- به پیامها گوش دهید و پاسخ دهید.
- بیصدا کردن اعلانهای پیامها
- گفتگوهای جدید را شروع کنید.
اصطلاحات
این اصطلاحات در این صفحه استفاده شدهاند:
مزایای برنامههای غیرمتمرکز
برنامههای جداگانه، مانند Car Messenger، این مزایا را ارائه میدهند:
- فقط از متدهای عمومی استفاده میکند (هیچ وابستگی پلتفرمی به APIهای پنهان ندارد)
- توسعه برنامهها خارج از پلتفرم اندروید
- فعال کردن انتشارهای مکرر (برای ویژگیهای جدید و مشکلات رفع شده)
- بهروزرسانی برنامهها از طریق گوگل پلی
درباره برنامههای بدون بستهبندی بیشتر بدانید.
جزئیات فنی
این بخش معماری Car Messenger را شرح میدهد. برای کسب اطلاعات بیشتر، به بخش «ادغام با CarVoiceInteractionSession» مراجعه کنید.
معماری مبتنی بر تلفن
هنگام جفت شدن از طریق بلوتوث، دادهها از پایگاه داده تلفن همراه با پایگاه داده تلفن خودرو همگامسازی میشوند. پس از قطع اتصال بلوتوث، دادههای همگامسازی شده از پایگاه داده تلفن خودرو حذف میشوند.
این قابلیت در اندروید ۱۲ معرفی شد. مزایای اصلی آن عبارتند از:
- پیامهای انبوه کاربران را میتوان از یک پایگاه داده بازیابی کرد.
- پیامهای درایوهای قبلی پشتیبانی میشوند.
- از معماری و API مشابهی برای ذخیره و بازیابی پیامک در تلفنهای اندروید استفاده میکند.
- کاملاً از پلتفرم اندروید جدا میشود.
جریان از این قرار است:
شکل ۱. جریان داده مبتنی بر تلفن.
جریان نشان داده شده در قالب متن:
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.
کاری که ما با دادهها انجام میدهیم به این صورت است:
شکل ۲. مدیریت دادههای پیامرسان خودرو.
جریان نشان داده شده در قالب متن:
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.
- در هنگام اتصال، دادهها با استفاده از بلوتوث MAP از تلفن به خودرو منتقل میشوند.
- با قطع اتصال، دادههای آن تلفن از پایگاه داده خودرو حذف میشود.
پیامرسان خودرو دریافت کنید
آخرین کامیت پیامرسان خودرو را از گوگل گیت دریافت کنید.
APIهای تعامل صوتی
پیامرسان خودرو از رابطهای برنامهنویسی کاربردی (API) CarVoiceInteractionSession برای ادغام با دستیار استفاده میکند. این عناصر در بخشهای بعدی توضیح داده شدهاند.
مدل PendingIntent
این APIها از PendingIntent برای ارسال کوئریهای حلشدهی دستیار به Car Messenger استفاده میکنند.
این توالی وقایع است:
پیامرسان خودرو با فراخوانی
activity.showAssist(Bundle args)دستیار را راهاندازی میکند . args شامل اکشن API و پارامترهای مورد نیاز آن است که در صورت نیاز شامل یک intent در حال انتظار نیز میشود.دستیار در صورت لزوم ورودی کاربر را بازیابی میکند و آن را با هدف در حال بررسی بستهبندی میکند.
دستیار، هدف را به Car Messenger ارسال میکند.
پیامرسان خودرو مشکل API را حل میکند .
اقدام API علامتگذاری به عنوان خوانده شده
وقتی دستیار در حال خواندن پیامی است، PendingIntent با اکشن VOICE_ACTION_READ_NOTIFICATION یا VOICE_ACTION_READ_CONVERSATION به Car Messenger ارسال میشود تا پیام به عنوان خوانده شده علامتگذاری شود.
عملکرد API پاسخ مستقیم
وقتی دستیار در حال پاسخ دادن به یک پیام است، PendingIntent با اکشنهای VOICE_ACTION_REPLY_NOTIFICATION و VOICE_ACTION_REPLY_CONVERSATION برای پاسخ به مکالمه به Car Messenger ارسال میشود.
اقدام API ارسال پیامک مستقیم
یک بسته با اکشن VOICE_ACTION_SEND_SMS از Car Messenger به دستیار ارسال میشود.
کد نمونه:
/**
* 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”;
این تصویر، نوشتن پیام را هنگام انتخاب گیرنده نشان میدهد:
شکل ۳. صفحه مخاطبین در برنامه شمارهگیر.
این تصویر، نوشتن پیام را در زمانی که هیچ گیرندهای با استفاده از New Message انتخاب نشده است، نشان میدهد:
شکل ۴. دکمه پیام جدید در برنامه مسنجر.
ادغام ارسال مستقیم پیامک
در اینجا مثالی از شمارهگیر که VOICE_ACTION_SEND_SMS را با پارامترهای اختیاری ادغام میکند، آورده شده است:
/**
* 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;
}
بهبودهایی در TTR و پاسخ مستقیم
API بهروزرسانیشده اکنون از یک کلاس Conversation همهکاره استفاده میکند که امکان عملیات فراتر از حوزه اعلانها و گسترش قابلیتها در چارچوب برنامه را فراهم میکند. این جایگزین الزام قبلی استفاده از کلاس StatusBarNotification است.
اشکال زدایی مسنجر خودرو
برای کسب اطلاعات بیشتر در مورد اشکالزدایی Car Messenger، به بخشهای زیر مراجعه کنید.
اشکالزدایی اتصالات بلوتوث
دستور
dumpsysرا اجرا کنید:adb shell dumpsys bluetooth_manager- در خروجی دستور dumpsys
MapClientServiceرا جستجو کنید.
Profile: MapClientService mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected- در خروجی دستور dumpsys
تأیید کنید که دستگاه صحیح فهرست شده است. برای مثال:
شکل ۵. فهرست دستگاهها.اگر دستگاهی پیدا نشد، یکی از کارهای زیر را انجام دهید:
- دوباره به بلوتوث وصل شوید.
یا
- در تنظیمات بلوتوث، تأیید کنید که پیام متنی روشن باشد.
یا
- از طریق تلفن، تأیید کنید که دسترسی به پیام (Message Access) اعطا شده است.
اشکالزدایی پایگاههای داده بلوتوث
پیامرسان خودرو بر اساس پایگاه داده تلفن ساخته شده است. برای تعیین اینکه آیا بلوتوث در آن پایگاه داده وجود دارد یا خیر، میتوانید از دستورات موجود در جدول استفاده کنید.
| وظیفه | فرماندهی |
|---|---|
| مکالمه | adb shell content query --uri content://mms-sms/conversations?simple=true |
| فقط پیامکها | adb shell content query --uri content://sms |
| پیامهای MMS/SMS | adb shell content query --uri content://mms-sms/conversations |
| فقط پیامهای MMS | adb shell content query --uri content://mms |
| فقط صندوق ورودی MMS | adb shell content query --uri content://mms/conversations/inbox |
| فقط پیامکهای ارسالی | adb shell content query --uri content://sms/sent |
| فقط صندوق ورودی پیامک | adb shell content query --uri content://sms/conversations/inbox |
| پیام MMS بخش اول (به جای 1 ، شناسه MMS را وارد کنید) | adb shell content query --uri content://mms/part/1 |
اشکالزدایی پیامرسان خودرو و پرسشهای دستیار صوتی
اگر تصویر ساخت eng یا userdebug باشد، گزارشها به طور پیشفرض چاپ میشوند. در غیر این صورت، برای فعال کردن گزارشگیری برای Car Messenger:
برای تگهای مربوطه،
adb shell setprop log.tag.<TAG> DEBUGاجرا کنید.فعال کردن ثبت وقایع برای دستیار از پیش بارگذاریشده
برای باگهای با قابلیت تکرارپذیری بالا، استفاده از نقاط توقف (breakpoints) در اندروید استودیو را در نظر بگیرید.