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 للدمج مع "مساعد Google". يتم وصف هذه العناصر في الأقسام التالية.

نموذج PendingIntent

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

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

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

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

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

  4. يحلّ تطبيق Car Messenger مشكلة إجراء واجهة برمجة التطبيقات.

إجراء واجهة برمجة التطبيقات "وضع علامة مقروءة"

عندما يقرأ "مساعد Google" رسالة، يتم إرسال PendingIntent إلى تطبيق "مراسلة السيارة" مع الإجراء VOICE_ACTION_READ_NOTIFICATION أو VOICE_ACTION_READ_CONVERSATION لوضع علامة "مقروءة" على الرسالة.

إجراء Direct Reply API

عندما يردّ "مساعد Google" على رسالة، يتم إرسال PendingIntent إلى تطبيق "مراسلة" في السيارة مع الإجراء 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

دمج إجراء إرسال رسالة SMS مباشرةً

في ما يلي مثال على دمج تطبيق "الهاتف" مع 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.

تصحيح أخطاء تطبيق 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

تصحيح أخطاء طلبات البحث في "مساعد Google" وCar Messenger

يتم تسجيل عمليات الطباعة تلقائيًا إذا كانت صورة الإصدار eng أو userdebug. في ما عدا ذلك، لتفعيل التسجيل في تطبيق "المراسلة في السيارة"، اتّبِع الخطوات التالية:

  1. انقر على "تشغيل" للعلامات ذات الصلة adb shell setprop log.tag.<TAG> DEBUG.

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

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