مراسلة السيارة

يوفّر تطبيق 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.

في ما يلي الإجراءات التي نتّخذها بشأن البيانات:

استخدام بيانات Car Messenger الشكل 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.
  • عند الاتصال، يتم نقل البيانات من الهاتف إلى السيارة باستخدام تقنية Bluetooth MAP.
  • عند قطع الاتصال، يتم حذف بيانات ذلك الهاتف من قاعدة بيانات السيارة.

الحصول على Car Messenger

احصل على أحدث خطة اشتراك من Car Messenger من Google Git.

واجهات برمجة التطبيقات للتفاعل الصوتي

تستخدم ميزة Car Messenger واجهات برمجة تطبيقات CarVoiceInteractionSession للتكامل مع المساعد. يتم وصف هذه العناصر في الأقسام التالية.

نموذج PendingIntent

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

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

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

  2. يسترجع "مساعد Google" إدخال المستخدم إذا لزم الأمر، ويُجمِّعه مع الطلب المعلّق.

  3. يُرسِل "مساعد Google" الطلب مرة أخرى إلى Car Messenger.

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

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

عندما يقرأ "مساعد Google" رسالة، يتم إرسال PendingIntent إلى Car Messenger مع الإجراء 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 من مراسلة السيارة إلى المساعد.

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

/**
 *   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.

تصحيح أخطاء 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
رسائل الوسائط المتعددة/الرسائل القصيرة 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.