מסנג'ר לרכב

Car Messenger מציע יכולות העברת הודעות המיועדות למכשירי רכב. כמו אפליקציות רכב אחרות, משתמשים מפעילים את Car Messenger מהמשגר.

מה חדש ב-Car Messenger?

עם האפליקציה החדשה Car Messenger, נהגים:

  • קבל חווית מסרים ייעודית.
  • הפעל את מכונית מסנג'ר מהמשגר.
  • עיין בהודעות שהתקבלו לפני ובמהלך נסיעה.
  • האזן להודעות והשב אותן.
  • השתק הודעות על הודעות.
  • התחל שיחות חדשות.

טרמינולוגיה

מונחים אלה משמשים בדף זה:

הקש לקריאה (TTR)
הקשה לקריאה מאפשרת לעוזרים קוליים לקרוא ולהשיב להודעות טקסט בשם אותו משתמש, כאשר המשתמש מקיים אינטראקציה עם הודעות הודעות.

תשובה ישירה
בדומה להקש-ל-קריאה, אלא שהעוזרת הקולית לא קוראת את ההודעה ומיד מפרסמת הנחיה לתשובה.

שליחה ישירה
משתלב עם עוזר קולי כדי ליצור זרימת הודעות חדשה עם או בלי איש קשר מוגדר.

היתרונות של אפליקציות מפורקות

אפליקציות מנותקות, כגון Car Messenger, מספקות את היתרונות הבאים:

  • משתמש בשיטות ציבוריות בלבד (ללא תלות בפלטפורמה בממשקי API נסתרים)
  • פתח אפליקציות מחוץ לפלטפורמת אנדרואיד
  • אפשר מהדורות תכופות יותר (לתכונות חדשות ובעיות מתוקנות)
  • עדכן אפליקציות דרך Google Play

למידע נוסף על אפליקציות לא מקובצות .

פרטים טכניים

סעיף זה מתאר את ארכיטקטורת ה-Car Messenger. למידע נוסף, ראה שילוב עם CarVoiceInteractionSession .

ארכיטקטורה מבוססת טלפוניה

בעת התאמה באמצעות Bluetooth, הנתונים מסונכרנים ממסד הנתונים הטלפוניים של הטלפון למסד הנתונים הטלפוניים של המכונית. עם ניתוק בלוטות', הנתונים המסונכרנים נמחקים ממאגר הטלפוניה של המכונית.

יכולת זו הוצגה באנדרואיד 12. היתרונות העיקריים כוללים:

  • ניתן לאחזר הודעות משתמש בכמות גדולה ממסד נתונים.
  • הודעות מכוננים קודמים נתמכות.
  • משתמש בארכיטקטורה וב-API דומים לאחסון ואחזור SMS בטלפונים אנדרואיד.
  • הופך למנותק מלא מפלטפורמת אנדרואיד.

הנה הזרימה:

זרימת נתונים מבוססת טלפוניה איור 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.

הנה מה שאנחנו עושים עם הנתונים:

שימוש בנתונים לרכב Messenger איור 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.

ממשקי API של אינטראקציה קולית

Car Messenger משתמש בממשקי API של CarVoiceInteractionSession כדי להשתלב עם העוזר. אלמנטים אלה מתוארים בסעיפים הבאים.

מודל PendingIntent

ממשקי API אלה משתמשים PendingIntent כדי להעביר שאילתות עוזר שנפתרו בחזרה ל-Car Messenger.

זה רצף האירועים:

  1. Car Messenger משיק עוזר על ידי קריאה ל- activity.showAssist(Bundle args) . ה-ars מכילים את פעולת ה-API ואת הפרמטרים הנדרשים שלה, המכילים כוונה ממתינה במידת הצורך.

  2. Assistant מאחזר קלט משתמש במידת הצורך, וחורז את זה עם הכוונה הממתינה.

  3. Assistant שולח את הכוונה בחזרה ל-Car Messenger.

  4. Car Messenger פותר את פעולת ה-API.

סמן כפעולת API שנקראה

כאשר עוזר קורא הודעה, PendingIntent נשלחת ל-Car Messenger עם הפעולה VOICE_ACTION_READ_NOTIFICATION או VOICE_ACTION_READ_CONVERSATION כדי לסמן את ההודעה כנקראה.

פעולת API של תגובה ישירה

כאשר עוזר משיב להודעה, PendingIntent נשלח ל-Car Messenger עם הפעולה VOICE_ACTION_REPLY_NOTIFICATION ו- VOICE_ACTION_REPLY_CONVERSATION כדי להשיב לשיחה.

פעולת API של שלח ישיר של SMS

חבילה עם הפעולה 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”;

תמונה זו מציגה כתיבת הודעה כאשר נבחר נמען:

דף אנשי קשר של אפליקציית חייגן איור 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;
    }

שיפורים ל-TTR ולתשובה ישירה

ה-API המעודכן משתמש כעת במחלקת Conversation רב-תכליתית, המאפשר פעולות מעבר לתחום ההתראות ומרחיב את היכולות בהקשר של האפליקציה. זה מחליף את הדרישה הקודמת לשימוש במחלקה StatusBarNotification .

איתור באגים לרכב מסנג'ר

עיין בסעיפים הבאים כדי ללמוד עוד על איתור באגים של Car Messenger.

איתור באגים בחיבורי Bluetooth

  1. הפעל את הפקודה dumpsys :

    adb shell dumpsys bluetooth_manager
    
    • חפש את MapClientService בפלט הפקודה dumpsys.
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. אשר שהמכשיר הנכון רשום. לדוגמה:

    רשימת מכשירים איור 5. רשימת התקנים.

  3. אם לא נמצא מכשיר, בצע אחת מהפעולות הבאות:

    • התחבר מחדש ל-Bluetooth.

    אוֹ

    • בהגדרות Bluetooth, אשר שהודעת הטקסט מופעלת.

    אוֹ

    • בטלפון, אשר כי ניתנת גישה להודעות .

איתור באגים במסדי נתונים של Bluetooth

Car Messenger בנוי על מסד הנתונים של הטלפוניה. כדי לקבוע אם Bluetooth מאכלס מסד נתונים זה, אתה יכול להשתמש בפקודות בטבלה.

מְשִׁימָה פקודה
שִׂיחָה adb shell content query--uri content://mms-sms/conversations?simple=true
הודעות SMS בלבד adb shell content query--uri content://sms
הודעות MMS/SMS adb shell content query--uri content://mms-sms/conversations
הודעות MMS בלבד adb shell content query--uri content://mms
תיבת דואר MMS בלבד adb shell content query--uri content://mms/conversations/inbox
הודעות SMS שנשלחו בלבד adb shell content query--uri content://sms/sent
תיבת SMS בלבד adb shell content query--uri content://sms/conversations/inbox
הודעת MMS חלק 1
(החלף 1 במזהה של ה-MMS)
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 .