Car Messenger bietet Messaging-Funktionen, die für Geräte im Auto entwickelt wurden. Wie bei anderen Auto-Apps starten Nutzer Car Messenger über den Launcher.
Neuerungen in Car Messenger
Mit der neuen Car Messenger App können Fahrer:
- eine spezielle Messaging-Funktion nutzen.
- Car Messenger über den Launcher starten.
- Nachrichten durchsuchen, die vor und während der Fahrt empfangen wurden.
- Nachrichten anhören und beantworten.
- Nachrichtenbenachrichtigungen stummschalten.
- Neue Unterhaltungen starten.
Terminologie
Auf dieser Seite werden die folgenden Begriffe verwendet:
Vorteile von nicht gebündelten Apps
Nicht gebündelte Apps wie Car Messenger bieten folgende Vorteile:
- Verwendet nur öffentliche Methoden (keine Plattformabhängigkeiten von verborgenen APIs)
- Apps außerhalb der Android-Plattform entwickeln
- Häufigere Releases ermöglichen (für neue Funktionen und behobene Probleme)
- Apps über Google Play aktualisieren
Weitere Informationen zu nicht gebündelten Apps.
Technische Details
In diesem Abschnitt wird die Architektur von Car Messenger beschrieben. Weitere Informationen finden Sie unter Mit CarVoiceInteractionSession einbinden.
Telefoniebasierte Architektur
Bei einer Bluetooth-Verbindung werden Daten aus der Telefoniedatenbank des Smartphones mit der Telefoniedatenbank des Autos synchronisiert. Wenn die Bluetooth-Verbindung getrennt wird, werden die synchronisierten Daten aus der Telefoniedatenbank des Autos gelöscht.
Diese Funktion wurde in Android 12 eingeführt. Die wichtigsten Vorteile sind:
- Nutzer können Massennachrichten aus einer Datenbank abrufen.
- Nachrichten aus früheren Fahrten werden unterstützt.
- Verwendet eine ähnliche Architektur und API für die Speicherung und den Abruf von SMS auf Android-Smartphones.
- Ist vollständig von der Android-Plattform entkoppelt.
So sieht der Ablauf aus:
Abbildung 1 Telefoniebasierter Datenfluss
Ablauf 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 verarbeiten wir die Daten:
Abbildung 2. Datenverarbeitung in Car Messenger
Ablauf 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.
- Bei der Verbindung 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
Laden Sie den neuesten Car Messenger-Commit von Google Git herunter.
APIs für Sprachinteraktion
Car Messenger verwendet CarVoiceInteractionSession APIs, um in den Assistant eingebunden zu werden. Diese Elemente werden in den folgenden Abschnitten beschrieben.
PendingIntent-Modell
Diese APIs verwenden PendingIntent, um aufgelöste Assistant-Abfragen an
Car Messenger zurückzugeben.
Das ist die Ereignisabfolge:
Car Messenger startet den Assistant durch Aufrufen von
activity.showAssist(Bundle args). Die Argumente enthalten die API-Aktion und die erforderlichen Parameter, bei Bedarf auch ein ausstehendes Intent.Der Assistant ruft bei Bedarf die Nutzereingabe ab und verpackt sie mit dem ausstehenden Intent.
Der Assistant sendet das Intent an Car Messenger zurück.
Car Messenger löst die API-Aktion auf.
API-Aktion „Als gelesen markieren“
Wenn der Assistant eine Nachricht liest, wird PendingIntent mit der Aktion VOICE_ACTION_READ_NOTIFICATION oder
VOICE_ACTION_READ_CONVERSATION an Car
Messenger gesendet, um die Nachricht als gelesen zu markieren.
API-Aktion „Direktantwort“
Wenn der Assistant auf eine Nachricht antwortet, wird PendingIntent mit der Aktion VOICE_ACTION_REPLY_NOTIFICATION und
VOICE_ACTION_REPLY_CONVERSATION an Car
Messenger gesendet, um auf die Unterhaltung zu antworten.
API-Aktion „Direkt senden“ (SMS)
Ein Bundle mit der VOICE_ACTION_SEND_SMS Aktion wird von Car Messenger an den
Assistant gesendet.
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”;
Diese Abbildung zeigt das Verfassen einer Nachricht, wenn ein Empfänger ausgewählt ist:
Abbildung 3. Seite „Kontakte“ in der Telefon App
Diese Abbildung zeigt das Verfassen einer Nachricht ohne ausgewählten Empfänger mit Neue Nachricht:
Abbildung 4. Button „Neue Nachricht“ in der Messenger App
API-Aktion „Direkt senden“ (SMS) einbinden
Hier ein Beispiel für die Einbindung von VOICE_ACTION_SEND_SMS in die Telefon App mit optionalen
Parametern:
/**
* 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 „Zum Vorlesen tippen“ und „Direktantwort“
Die aktualisierte API verwendet jetzt eine vielseitige Conversation Klasse,
die Vorgänge außerhalb des Benachrichtigungsbereichs ermöglicht und die Funktionen
im Kontext der App erweitert. Dadurch entfällt die bisherige Anforderung, die
StatusBarNotification Klasse zu verwenden.
Fehlerbehebung bei Car Messenger
In den folgenden Abschnitten erfahren Sie mehr über die Fehlerbehebung bei Car Messenger.
Fehlerbehebung bei Bluetooth-Verbindungen
Führen Sie den Befehl
dumpsysaus:adb shell dumpsys bluetooth_manager- Suchen Sie in der Befehlsausgabe von `dumpsys` nach
MapClientService.
Profile: MapClientService mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected- Suchen Sie in der Befehlsausgabe von `dumpsys` nach
Prüfen Sie, ob das richtige Gerät aufgeführt ist. Beispiel:
Abbildung 5 GerätelisteWenn kein Gerät gefunden wird, führen Sie einen der folgenden Schritte aus:
- Stellen Sie die Bluetooth-Verbindung wieder her.
ODER
- Prüfen Sie in den Bluetooth-Einstellungen,ob SMS aktiviert ist.
ODER
- Prüfen Sie auf dem Smartphone, ob der Nachrichtenzugriff gewährt wurde.
Fehlerbehebung bei Bluetooth-Datenbanken
Car Messenger basiert auf der Telefoniedatenbank. Mit den Befehlen in der Tabelle können Sie prüfen, ob Bluetooth diese Datenbank füllt.
| 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 gesendete SMS | adb shell content query --uri content://sms/sent |
| Nur SMS-Posteingang | adb shell content query --uri content://sms/conversations/inbox |
| MMS-Nachrichtenteil 1 (ersetzen Sie 1 durch die ID der MMS) |
adb shell content query --uri content://mms/part/1 |
Fehlerbehebung bei Car Messenger- und Assistant-Abfragen
Protokolle werden standardmäßig ausgegeben, wenn das Build-Image eng oder userdebug ist.
Andernfalls können Sie das Logging für Car Messenger so aktivieren:
Führen Sie für die relevanten Tags
adb shell setprop log.tag.<TAG> DEBUGaus.Aktivieren Sie das Logging für Vorinstallierter Assistant.
Bei gut reproduzierbaren Fehlern können Sie Breakpoints mit Android Studio verwenden.