رسول السيارة

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

ما الجديد في برنامج Car Messenger؟

مع تطبيق Car Messenger الجديد، يستطيع السائقون:

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

المصطلح

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

النقر للقراءة (TTR)
يتيح النقر للقراءة للمساعدين الصوتيين قراءة الرسائل النصية والرد عليها نيابة عن ذلك المستخدم، عندما يتفاعل المستخدم مع إشعارات الرسائل.

الرد المباشر
على غرار ميزة "النقر للقراءة"، باستثناء أن المساعد الصوتي لا يقرأ الرسالة ويصدر على الفور مطالبة بالرد.

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

فوائد التطبيقات غير المجمعة

توفر التطبيقات غير المجمعة، مثل Car Messenger، المزايا التالية:

  • يستخدم الطرق العامة فقط (لا توجد تبعيات للنظام الأساسي على واجهات برمجة التطبيقات المخفية)
  • تطوير التطبيقات خارج منصة الأندرويد
  • تمكين الإصدارات الأكثر تكرارًا (للميزات الجديدة والمشكلات التي تم إصلاحها)
  • تحديث التطبيقات من خلال Google Play

تعرف على المزيد حول التطبيقات غير المجمعة .

تفاصيل تقنية

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

الهندسة المعمارية القائمة على الهاتف

عند الاقتران عبر Bluetooth، تتم مزامنة البيانات من قاعدة بيانات الهاتف إلى قاعدة بيانات الهاتف في السيارة. عند قطع اتصال Bluetooth، يتم حذف البيانات المتزامنة من قاعدة بيانات الاتصالات الهاتفية بالسيارة.

تم تقديم هذه الإمكانية في Android 12. وتشمل المزايا الأساسية ما يلي:

  • يمكن استرداد رسائل المستخدم المجمعة من قاعدة بيانات.
  • يتم دعم الرسائل من محركات الأقراص السابقة.
  • يستخدم بنية مماثلة وواجهة برمجة التطبيقات (API) لتخزين الرسائل القصيرة واسترجاعها على هواتف 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. التعامل مع البيانات سيارة رسول.

التدفق موضح بتنسيق النص:

 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 من Google Git.

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

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

نموذج النية المعلقة

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

وهذا تسلسل الأحداث:

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

  2. يقوم المساعد باسترداد مدخلات المستخدم إذا لزم الأمر، وحزم ذلك مع النية المعلقة.

  3. يقوم المساعد بإرسال النية مرة أخرى إلى Car Messenger.

  4. يقوم Car Messenger بحل إجراء API.

وضع علامة على إجراء API للقراءة

عندما يقرأ المساعد رسالة، يتم إرسال PendingIntent إلى Car Messenger مع الإجراء VOICE_ACTION_READ_NOTIFICATION أو VOICE_ACTION_READ_CONVERSATION لوضع علامة على الرسالة كمقروءة.

إجراء الرد المباشر على واجهة برمجة التطبيقات

عندما يقوم المساعد بالرد على رسالة، يتم إرسال PendingIntent إلى Car Messenger مع الإجراء VOICE_ACTION_REPLY_NOTIFICATION و VOICE_ACTION_REPLY_CONVERSATION للرد على المحادثة.

إجراء Direct Send SMS 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”;

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

صفحة جهات الاتصال في تطبيق Dialer الشكل 3. صفحة جهات الاتصال في تطبيق Dialer.

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

لم يتم تحديد مستلم الشكل 4. زر رسالة جديدة في تطبيق Messenger.

دمج إجراء الإرسال المباشر عبر الرسائل القصيرة

فيما يلي مثال على قيام برنامج Dialer بدمج 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 والرد المباشر

تستخدم واجهة برمجة التطبيقات المحدثة الآن فئة Conversation متعددة الاستخدامات، مما يسمح بعمليات تتجاوز نطاق الإشعارات وتوسع الإمكانات داخل سياق التطبيق. يحل هذا محل المتطلبات السابقة لاستخدام فئة StatusBarNotification .

تصحيح أخطاء رسول السيارة

راجع الأقسام التالية لمعرفة المزيد حول تصحيح أخطاء 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. إذا لم يتم العثور على أي جهاز، فقم بأحد الإجراءات التالية:

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

    أو

    • في إعدادات Bluetooth، تأكد من تشغيل الرسالة النصية .

    أو

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

تصحيح قواعد بيانات البلوتوث

تم بناء Car Messenger على قاعدة بيانات الهاتف. لتحديد ما إذا كان Bluetooth يقوم بملء قاعدة البيانات هذه، يمكنك استخدام الأوامر الموجودة في الجدول.

مهمة يأمر
محادثة adb shell content query--uri content://mms-sms/conversations?simple=true
رسائل SMS فقط 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
الرسائل المرسلة SMS فقط adb shell content query--uri content://sms/sent
صندوق الوارد للرسائل القصيرة فقط 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. تمكين التسجيل للمساعد الذي تم تحميله مسبقًا .

  3. بالنسبة للأخطاء القابلة للتكرار بشكل كبير، فكر في استخدام نقاط التوقف مع Android Studio .