Car Messenger

يوفّر تطبيق Car Messenger إمكانات مراسلة مصمَّمة لأجهزة السيارات. كما هو الحال مع تطبيقات السيارات الأخرى، يبدأ المستخدمون تطبيق Car Messenger من مشغّل التطبيقات.

ما الجديد في تطبيق Car Messenger؟

باستخدام تطبيق Car Messenger الجديد، يمكن للسائقين إجراء ما يلي:

  • الحصول على تجربة مراسلة مخصّصة
  • شغِّل تطبيق Car Messenger من مشغّل التطبيقات.
  • تصفُّح الرسائل التي تم استلامها قبل وأثناء القيادة
  • الاستماع إلى الرسائل والردّ عليها
  • تجاهل إشعارات الرسائل
  • بدء محادثات جديدة

المصطلحات

تُستخدَم المصطلحات التالية في هذه الصفحة:

نسبة النقر إلى القراءة (TTR)
تتيح ميزة "النقر للقراءة" لمساعدات الصوت قراءة الرسائل النصية والردّ عليها نيابةً عن المستخدم عندما يتفاعل مع إشعارات الرسائل.

الرد المباشر
هي ميزة مشابهة لميزة "النقر للتحدث"، ولكن لا يقرأ المساعد الصوتي الرسالة بصوت عالٍ، بل يطلب منك الردّ عليها فورًا.

الإرسال المباشر
تتكامل هذه الفئة مع مساعد صوتي لإنشاء رسالة جديدة مع جهة اتصال محدّدة أو بدونها.

مزايا التطبيقات غير المجمَّعة

تقدّم التطبيقات غير المجمّعة، مثل 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.

في ما يلي ما نفعله بالبيانات:

استخدام البيانات في تطبيق &quot;المراسلة في السيارة&quot; الشكل 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 للدمج مع &quot;مساعد Google&quot;. يتم وصف هذه العناصر في الأقسام التالية.

نموذج PendingIntent

تستخدم واجهات برمجة التطبيقات هذه PendingIntent لإعادة طلبات المساعد التي تم حلّها إلى تطبيق Car Messenger.

في ما يلي تسلسل الأحداث:

  1. يؤدي تطبيق Car Messenger إلى تشغيل "مساعد Google" من خلال الاتصال بالرقم activity.showAssist(Bundle args). تحتوي الوسيطات على إجراء واجهة برمجة التطبيقات والمَعلمات المطلوبة، بما في ذلك intent معلّق إذا لزم الأمر.

  2. يستردّ &quot;مساعد Google&quot; إدخال المستخدم إذا لزم الأمر، ويجمّعه مع النية المعلّقة.

  3. يرسل "مساعد Google" الغرض إلى تطبيق Car Messenger.

  4. يتم حلّ إجراء واجهة برمجة التطبيقات من خلال 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 إلى &quot;مساعد Google&quot;.

نموذج التعليمات البرمجية:

/**
 *   KEY_PHONE_NUMBER - Recipients 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 - Recipients 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 - Recipients 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;

تعرض هذه الصورة عملية إنشاء رسالة عند اختيار مستلِم:

صفحة &quot;جهات الاتصال&quot; في تطبيق &quot;برنامج الاتصال&quot; الشكل 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.

تصحيح أخطاء اتصالات البلوتوث

  1. نفِّذ الأمر dumpsys:

    adb shell dumpsys bluetooth_manager
    • ابحث عن MapClientService في ناتج أمر dumpsys.
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. تأكَّد من إدراج الجهاز الصحيح. مثلاً:

    قائمة الأجهزة الشكل 5. قائمة الأجهزة

  3. في حال عدم العثور على أي جهاز، اتّبِع إحدى الخطوات التالية:

    • أعِد الاتصال بالبلوتوث.

    أو

    • في إعدادات البلوتوث، تأكَّد من تفعيل الرسائل النصية.

    أو

    • على الهاتف، أكِّد منح إذن الوصول إلى الرسائل.

تصحيح أخطاء قواعد بيانات البلوتوث

تم إنشاء تطبيق 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، اتّبِع الخطوات التالية:

  1. ابحث عن العلامات ذات الصلة adb shell setprop log.tag.<TAG> DEBUG.

  2. فعِّل التسجيل في ميزة "مساعد Google" المحمَّلة مسبقًا".

  3. بالنسبة إلى الأخطاء التي يمكن إعادة إنتاجها بسهولة، ننصحك باستخدام نقاط توقّف مع استوديو Android.