يوفّر تطبيق Car Messenger إمكانات مراسلة مصمَّمة لأجهزة السيارات. كما هو الحال مع تطبيقات السيارات الأخرى، يبدأ المستخدمون تطبيق Car Messenger من مشغّل التطبيقات.
ما الجديد في تطبيق Car Messenger؟
باستخدام تطبيق Car Messenger الجديد، يمكن للسائقين إجراء ما يلي:
- الحصول على تجربة مراسلة مخصّصة
- شغِّل تطبيق Car Messenger من مشغّل التطبيقات.
- تصفُّح الرسائل التي تم استلامها قبل وأثناء القيادة
- الاستماع إلى الرسائل والردّ عليها
- تجاهل إشعارات الرسائل
- بدء محادثات جديدة
المصطلحات
تُستخدَم المصطلحات التالية في هذه الصفحة:
مزايا التطبيقات غير المجمَّعة
تقدّم التطبيقات غير المجمّعة، مثل Car Messenger، المزايا التالية:
- يستخدم طرقًا عامة فقط (بدون تبعيات النظام الأساسي على واجهات برمجة التطبيقات المخفية)
- تطوير تطبيقات خارج نظام Android الأساسي
- تفعيل الإصدارات المتكرّرة (للميزات الجديدة والمشاكل التي تم إصلاحها)
- تحديث التطبيقات من خلال Google Play
مزيد من المعلومات عن التطبيقات غير المجمَّعة
التفاصيل الفنية
يوضّح هذا القسم بنية تطبيق Car Messenger. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة التكامل مع CarVoiceInteractionSession.
البنية المستندة إلى الاتصالات الهاتفية
عند الإقران عبر البلوتوث، تتم مزامنة البيانات من قاعدة بيانات الاتصالات في الهاتف إلى قاعدة بيانات الاتصالات في السيارة. عند إلغاء ربط البلوتوث، يتم حذف البيانات المتزامنة من قاعدة بيانات الاتصال الهاتفي في السيارة.
تم تقديم هذه الإمكانية في نظام التشغيل Android 12. تشمل المزايا الرئيسية ما يلي:
- يمكن استرداد رسائل المستخدمين المجمّعة من قاعدة بيانات.
- يمكنك الاطّلاع على الرسائل من الرحلات السابقة.
- تستخدم بنية وواجهة برمجة تطبيقات مشابهتَين لتخزين الرسائل القصيرة واستردادها على هواتف Android.
- تصبح غير مرتبطة بنظام Android الأساسي.
إليك الخطوات:
الشكل 1. تدفّق البيانات المستند إلى خدمات الاتصال الهاتفي
في ما يلي مثال على سير العمل بتنسيق نصي:
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.
في ما يلي ما نفعله بالبيانات:
الشكل 2. التعامل مع بيانات تطبيق Car Messenger
في ما يلي مثال على سير العمل بتنسيق نصي:
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).
- وعند قطع الاتصال، يتم حذف بيانات هذا الهاتف من قاعدة بيانات السيارة.
تثبيت تطبيق Car Messenger
احصل على آخر عملية إرسال Car Messenger من Google Git.
واجهات برمجة التطبيقات للتفاعل الصوتي
يستخدم تطبيق Car Messenger واجهات برمجة التطبيقات CarVoiceInteractionSession للدمج مع "مساعد Google". يتم وصف هذه العناصر في الأقسام التالية.
نموذج PendingIntent
تستخدم واجهات برمجة التطبيقات هذه PendingIntent
لإعادة طلبات المساعد التي تم حلّها إلى تطبيق Car Messenger.
في ما يلي تسلسل الأحداث:
يؤدي تطبيق Car Messenger إلى تشغيل "مساعد Google" من خلال الاتصال بالرقم
activity.showAssist(Bundle args)
. تحتوي الوسيطات على إجراء واجهة برمجة التطبيقات والمَعلمات المطلوبة، بما في ذلك intent معلّق إذا لزم الأمر.يستردّ "مساعد Google" إدخال المستخدم إذا لزم الأمر، ويجمّعه مع النية المعلّقة.
يرسل "مساعد Google" الغرض إلى تطبيق Car Messenger.
يتم حلّ إجراء واجهة برمجة التطبيقات من خلال Car Messenger.
إجراء واجهة برمجة التطبيقات "وضع علامة "مقروءة""
عندما يقرأ "مساعد Google" رسالة، يتم إرسال PendingIntent
إلى تطبيق "مراسلة السيارة" مع الإجراء VOICE_ACTION_READ_NOTIFICATION
أو VOICE_ACTION_READ_CONVERSATION
لوضع علامة "مقروءة" على الرسالة.
إجراء واجهة Direct Reply API
عندما يردّ "مساعد Google" على رسالة، يتم إرسال PendingIntent
إلى تطبيق Car
Messenger مع الإجراء VOICE_ACTION_REPLY_NOTIFICATION
وVOICE_ACTION_REPLY_CONVERSATION
للردّ على المحادثة.
إجراء Direct Send SMS API
يتم إرسال حزمة تتضمّن الإجراء VOICE_ACTION_SEND_SMS
من تطبيق Car Messenger إلى "مساعد Google".
نموذج التعليمات البرمجية:
/**
* 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”;
تعرض هذه الصورة عملية إنشاء رسالة عند اختيار مستلِم:
الشكل 3. صفحة "جهات الاتصال" في تطبيق "برنامج الاتصال"
تعرض هذه الصورة كتابة رسالة بدون اختيار مستلِم باستخدام رسالة جديدة:
الشكل 4. زر "رسالة جديدة" في تطبيق Messenger
دمج إجراء "الإرسال المباشر للرسائل القصيرة"
في ما يلي مثال على دمج تطبيق "الهاتف" مع 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;
}
تحسينات على ميزة "الرد المباشر" و"التحويل من نص إلى كلام"
تستخدم واجهة برمجة التطبيقات المعدَّلة الآن فئة Conversation
متعددة الاستخدامات،
ما يتيح إجراء عمليات تتجاوز نطاق الإشعارات وتوسيع الإمكانات
ضمن سياق التطبيق. يحلّ هذا الإجراء محلّ الشرط السابق الذي كان يفرض استخدام الفئة StatusBarNotification
.
Debug Car Messenger
راجِع الأقسام التالية لمعرفة المزيد عن تصحيح أخطاء Car Messenger.
تصحيح أخطاء اتصالات البلوتوث
نفِّذ الأمر
dumpsys
:adb shell dumpsys bluetooth_manager
- ابحث عن
MapClientService
في ناتج أمر dumpsys.
Profile: MapClientService mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
- ابحث عن
تأكَّد من إدراج الجهاز الصحيح. مثلاً:
الشكل 5. قائمة الأجهزة
في حال عدم العثور على أي جهاز، اتّبِع إحدى الخطوات التالية:
- أعِد الاتصال بالبلوتوث.
أو
- في إعدادات البلوتوث، تأكَّد من تفعيل الرسائل النصية.
أو
- على الهاتف، أكِّد منح إذن الوصول إلى الرسائل.
تصحيح أخطاء قواعد بيانات البلوتوث
تم إنشاء تطبيق Car Messenger استنادًا إلى قاعدة بيانات الاتصالات الهاتفية. لتحديد ما إذا كان البلوتوث يملأ قاعدة البيانات هذه، يمكنك استخدام الأوامر الواردة في الجدول.
المهمة | الأمر |
---|---|
المحادثة | adb shell content query --uri content://mms-sms/conversations?simple=true |
الرسائل القصيرة فقط | adb shell content query --uri content://sms |
رسائل الوسائط المتعددة/الرسائل القصيرة | adb shell content query --uri content://mms-sms/conversations |
رسائل الوسائط المتعددة فقط | adb shell content query --uri content://mms |
البريد الوارد لرسائل الوسائط المتعددة فقط | adb shell content query --uri content://mms/conversations/inbox |
الرسائل القصيرة المرسَلة فقط | adb shell content query --uri content://sms/sent |
البريد الوارد للرسائل القصيرة SMS فقط | adb shell content query --uri content://sms/conversations/inbox |
رسالة الوسائط المتعددة، الجزء 1 (استبدِل 1 بمعرّف رسالة الوسائط المتعددة) |
adb shell content query --uri content://mms/part/1 |
تصحيح أخطاء طلبات البحث في Car Messenger والمساعد الصوتي
تتم طباعة السجلات تلقائيًا إذا كانت صورة الإصدار eng
أو userdebug
.
في ما عدا ذلك، لتفعيل التسجيل في Car Messenger، اتّبِع الخطوات التالية:
ابحث عن العلامات ذات الصلة
adb shell setprop log.tag.<TAG> DEBUG
.فعِّل التسجيل في ميزة "مساعد Google" المحمَّلة مسبقًا".
بالنسبة إلى الأخطاء التي يمكن إعادة إنتاجها بسهولة، ننصحك باستخدام نقاط توقّف مع استوديو Android.