Auto-Messenger

Car Messenger bietet Messaging-Funktionen speziell für Geräte im Automobilbereich. Wie bei anderen Auto-Apps starten Nutzer Car Messenger über die Übersicht.

Neu bei Car Messenger

Mit der neuen Car Messenger App können Fahrer:

  • Profitieren Sie von einer individuellen Kommunikation.
  • Starten Sie den Car Messenger über die Übersicht.
  • Nachrichten durchsuchen, die vor und während der Fahrt empfangen wurden.
  • Nachrichten anhören und beantworten.
  • Benachrichtigungen stummschalten.
  • Neue Unterhaltungen starten.

Terminologie

Diese Begriffe werden auf dieser Seite verwendet:

Tap-to-Read (TTR)
Mit der Funktion „Tap-to-Read“ können Sprachassistenten Ihre Nachrichten lesen und beantworten Textnachrichten im Namen von wenn der Nutzer mit Nachrichtenbenachrichtigungen interagiert.

Direktantwort
Ähnlich wie „Tap-to-Read“, mit dem Unterschied, dass der Sprachassistent das und fordert sofort eine Antwort an.

Direkt senden
Mit integriertem Sprachassistenten zum Schreiben einer neuen Nachricht mit oder ohne einen angegebenen Kontakt.

Vorteile entbündelter Apps

Nicht gebündelte Apps wie Car Messenger bieten folgende Vorteile:

  • Es werden nur öffentliche Methoden verwendet (keine Plattformabhängigkeiten von verborgenen APIs).
  • Apps außerhalb der Android-Plattform entwickeln
  • Häufigere Releases aktivieren (für neue Funktionen und behobene Probleme)
  • Apps über Google Play aktualisieren

Weitere Informationen zu entbündelten Apps

Technische Details

In diesem Abschnitt wird die Architektur von Car Messenger beschrieben. Weitere Informationen finden Sie unter In CarVoiceInteractionSession einbinden:

Telefoniebasierte Architektur

Bei einer Kopplung über Bluetooth werden die Daten des Telefons synchronisiert. der Telefoniedatenbank des Autos hinzufügen kann. Wird die Bluetooth-Verbindung getrennt, werden die synchronisierten Daten aus dem Telefoniedatenbank.

Diese Funktion wurde mit Android 12 eingeführt. Die Zu den wichtigsten Vorteilen gehören:

  • Bulk-Nutzernachrichten können aus einer Datenbank abgerufen werden.
  • Nachrichten von vorherigen Laufwerken werden unterstützt.
  • Verwendet eine ähnliche Architektur und API zum Speichern und Abrufen von SMS unter Android. Smartphones.
  • Sie wird vollständig von der Android-Plattform entbündelt.

So sieht der Ablauf aus:

Telefoniebasierter Datenfluss Abbildung 1: Telefoniebasierter Datenfluss.

Darstellung des Ablaufs im Textformat:

 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.

So verwenden wir die Daten:

Datennutzung in Car Messenger Abbildung 2: Datenverarbeitung durch Car Messenger

Darstellung des Ablaufs im Textformat:

 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.
  • Beim Verbinden werden die Daten über Bluetooth MAP vom Smartphone an das Auto übertragen.
  • Wenn die Verbindung getrennt wird, werden die Daten für dieses Smartphone aus der Datenbank des Autos gelöscht.

Car Messenger herunterladen

Holen Sie sich das neueste Car Messenger-Commit von Google Git.

Voice Interaction APIs

Car Messenger nutzt CarVoiceInteractionSession-APIs zur Integration mit dem Google Assistant. Diese Elemente werden in den folgenden Abschnitten beschrieben.

PendingIntent-Modell

Diese APIs verwenden PendingIntent, um aufgelöste Assistant-Anfragen an Auto-Messenger

Das sind die Ereignisse:

  1. Car Messenger startet den Assistenten durch einen Anruf bei activity.showAssist(Bundle args). Die Argumente enthalten die API-Aktion und ihre erforderlichen Parameter, die einen ausstehendem Intent.

  2. Assistant ruft bei Bedarf Nutzereingaben ab und erstellt diese zusammen mit dem ausstehender Intent.

  3. Assistant sendet den Intent zurück an Car Messenger.

  4. Car Messenger löscht die API-Aktion.

API-Aktion als gelesen markieren

Wenn Assistant eine Nachricht liest, wird „PendingIntent“ an das Auto gesendet Messenger mit der Aktion VOICE_ACTION_READ_NOTIFICATION oder VOICE_ACTION_READ_CONVERSATION, um die Nachricht als gelesen zu markieren.

Direct Reply API-Aktion

Wenn Assistant auf eine Nachricht antwortet, wird „PendingIntent“ an das Auto gesendet Messenger mit der Aktion VOICE_ACTION_REPLY_NOTIFICATION und VOICE_ACTION_REPLY_CONVERSATION, um auf die Unterhaltung zu antworten.

API-Aktion für Direct Send SMS

Ein Bundle mit der Aktion VOICE_ACTION_SEND_SMS wird von Car Messenger an das Google Assistant.

Beispielcode:

/**
 *   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”;

Dieses Bild zeigt, wie Sie eine Nachricht schreiben, wenn ein Empfänger ausgewählt wird:

Kontaktseite der Telefon App Abbildung 3: Kontakte in der Telefon App.

Dieses Bild zeigt, wie Sie eine Nachricht schreiben, wenn kein Empfänger mit ausgewählt wird. Neue Nachricht:

Kein Empfänger ausgewählt Abbildung 4: Schaltfläche „Neue Nachricht“ in der Messenger App.

Aktion für Direktversand von SMS einbinden

Hier ist ein Beispiel für die Integration von VOICE_ACTION_SEND_SMS über das Telefon mit optionalen Parameter:

    /**
     * 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;
    }

Verbesserungen bei TTR und Direktantwort

Die aktualisierte API verwendet jetzt eine vielseitige Conversation-Klasse, Ermöglicht Operationen jenseits des Benachrichtigungsbereichs und erweitert die Möglichkeiten im Kontext der App. Dies ersetzt die bisherige Anforderung zur Verwendung des Klasse StatusBarNotification.

Fehlersuche im Auto Messenger

Weitere Informationen zur Fehlerbehebung in Car Messenger finden Sie in den folgenden Abschnitten.

Fehler bei Bluetooth-Verbindungen beheben

  1. Führen Sie den Befehl dumpsys aus:

    adb shell dumpsys bluetooth_manager
    
    • Suchen Sie in der Ausgabe des dumpsys-Befehls nach MapClientService.
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. Prüfen Sie, ob das richtige Gerät aufgeführt ist. Beispiel:

    Geräteliste Abbildung 5: Geräteliste.

  3. Wenn kein Gerät gefunden wird, führen Sie einen der folgenden Schritte aus:

    • Stelle die Bluetooth-Verbindung wieder her.

    OR

    • Vergewissern Sie sich in den Bluetooth-Einstellungen,dass die Option SMS aktiviert ist.

    OR

    • Prüfen Sie auf dem Smartphone, ob Nachrichtenzugriff gewährt wurde.

Fehler in Bluetooth-Datenbanken beheben

Car Messenger basiert auf der Telefoniedatenbank. So finden Sie heraus, ob Bluetooth können Sie die Befehle in der Tabelle verwenden.

Aufgabe Befehl
Unterhaltung adb shell content query--uri content://mms-sms/conversations?simple=true
Nur SMS adb shell content query--uri content://sms
MMS/SMS adb shell content query--uri content://mms-sms/conversations
Nur MMS adb shell content query--uri content://mms
Nur MMS-Posteingang adb shell content query--uri content://mms/conversations/inbox
Nur per SMS gesendete Nachrichten adb shell content query--uri content://sms/sent
Nur SMS-Posteingang adb shell content query--uri content://sms/conversations/inbox
MMS, Teil 1
(ersetze 1 durch die ID der MMS)
adb shell content query--uri content://mms/part/1

Fehler bei Anfragen über Car Messenger und Sprachassistent beheben

Logs werden standardmäßig gedruckt, wenn das Build-Image eng oder userdebug ist. So aktivieren Sie die Protokollierung für Car Messenger:

  1. Führen Sie die relevanten Tags adb shell setprop log.tag.<TAG> DEBUG aus.

  2. Aktivieren Sie die Protokollierung für den vorinstallierten Assistant.

  3. Bei sehr reproduzierbaren Fehlern empfiehlt es sich, Haltepunkte mit Android Studio verfügbar.