Car Messenger

Car Messenger offre des fonctionnalités de messagerie conçues pour les appareils automobiles. Comme d'autres applications pour voiture, les utilisateurs démarrent Car Messenger à partir du lanceur d'applications.

Nouveautés de Car Messenger

Avec la nouvelle application Car Messenger, les conducteurs:

  • Bénéficiez d'une expérience de messagerie dédiée.
  • Lancez Car Messenger depuis le lanceur d'applications.
  • Parcourez les messages reçus avant et pendant un trajet.
  • Écoutez vos messages et répondez-y.
  • Coupez le son des notifications de message.
  • Lancez de nouvelles conversations.

Terminologie

Les termes suivants sont utilisés sur cette page:

Appuyer pour lire
La fonctionnalité Taper pour lire permet aux assistants vocaux de lire les messages et d'y répondre des SMS au nom de lorsque l'utilisateur interagit avec les notifications de message.

Réponse directe
Semblable à la fonctionnalité Taper pour lire, à la différence que l'assistant vocal ne lit pas à voix haute et envoie immédiatement une invite de réponse.

Envoi direct
Intégration d'un assistant vocal pour rédiger un nouveau message avec ou sans contact spécifié.

Avantages des applications dégroupées

Les applications dégroupées, comme Car Messenger, offrent les avantages suivants:

  • N'utilise que des méthodes publiques (pas de dépendances de plate-forme sur des API cachées)
  • Développer des applications en dehors de la plate-forme Android
  • Augmenter la fréquence de publication (pour les nouvelles fonctionnalités et les problèmes résolus)
  • Mettre à jour des applications via Google Play

En savoir plus sur les applications dégroupées

Détails techniques

Cette section décrit l'architecture de Car Messenger. Pour en savoir plus, consultez Intégrer à CarVoiceInteractionSession

Architecture basée sur la téléphonie

Lorsqu'elles sont associées via le Bluetooth, les données sont synchronisées à partir des données téléphoniques à la base de données des services de téléphonie de la voiture. Lors de la déconnexion du Bluetooth, les données synchronisées sont supprimées du téléphonique.

Cette fonctionnalité a été introduite dans Android 12. La Les principaux avantages sont les suivants:

  • Les messages utilisateur en masse peuvent être récupérés dans une base de données.
  • Les messages provenant de trajets précédents sont acceptés.
  • Utilise une architecture et une API similaires pour le stockage et la récupération de SMS sur Android téléphones.
  • Elle sera complètement dissociée de la plate-forme Android.

Voici la procédure à suivre:

Flux de données basé sur la téléphonie Figure 1. Flux de données basé sur la téléphonie.

Flux illustré au format texte:

 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.

Voici ce que nous faisons avec ces données:

Consommation des données de Messenger Figure 2. Traitement des données de Car Messenger.

Flux illustré au format texte:

 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.
  • Lors de la connexion, les données sont transférées du téléphone vers la voiture via le profil Bluetooth MAP.
  • Lors de la déconnexion, les données de ce téléphone sont supprimées de la base de données de la voiture.

Télécharger Car Messenger

Obtenez la dernière version du commit Car Messenger à partir de Google Git.

API d'interaction vocale

Car Messenger utilise les API CarVoiceInteractionSession pour s'intégrer à la assistante virtuelle. Ces éléments sont décrits dans les sections suivantes.

Modèle PendingIntent

Ces API utilisent PendingIntent pour transmettre les requêtes résolues de l'assistant aux Car Messenger.

Voici la séquence des événements:

  1. Car Messenger lance l'assistant en appelant activity.showAssist(Bundle args). Les arguments contiennent l'action de l'API et ses paramètres requis, ainsi qu'un intent en attente, si nécessaire.

  2. L'Assistant récupère les entrées utilisateur si nécessaire et les regroupe avec le intent en attente.

  3. L'Assistant renvoie l'intent à Car Messenger.

  4. Car Messenger résout l'action de l'API.

Action d'API "Marquer comme lu"

Lorsque l'Assistant lit un message, le PendingIntent est envoyé à la voiture Chat + avec l'action VOICE_ACTION_READ_NOTIFICATION ou VOICE_ACTION_READ_CONVERSATION pour marquer le message comme lu.

Action de l'API Direct Reply

Lorsque l'Assistant répond à un message, PendingIntent est envoyé à la voiture Chat + avec l'action VOICE_ACTION_REPLY_NOTIFICATION et VOICE_ACTION_REPLY_CONVERSATION pour répondre à la conversation.

Action Direct Send SMS API

Un lot avec l'action VOICE_ACTION_SEND_SMS est envoyé depuis Car Messenger vers la assistante virtuelle.

Exemple de code:

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

Cette image montre comment rédiger un message lorsqu'un destinataire est sélectionné:

Page Contacts de l&#39;application Téléphone Figure 3 : Page Contacts dans l'application Téléphone.

Cette image montre comment rédiger un message lorsqu'aucun destinataire n'est sélectionné à l'aide de Nouveau message:

Aucun destinataire sélectionné Figure 4. Bouton "Nouveau message" dans l'application Messenger.

Intégrer l'action Envoi direct de SMS

Voici un exemple d'intégration de VOICE_ACTION_SEND_SMS par l'application Téléphone : paramètres:

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

Améliorations apportées à TTR et aux réponses directes

L'API mise à jour utilise désormais une classe Conversation polyvalente, en permettant des opérations au-delà du domaine des notifications et en étendant les capacités dans le contexte de l'application. Cela vous évite d'avoir à utiliser StatusBarNotification.

Déboguer Car Messenger

Consultez les sections suivantes pour en savoir plus sur le débogage de Car Messenger.

Déboguer les connexions Bluetooth

  1. Exécutez la commande dumpsys :

    adb shell dumpsys bluetooth_manager
    
    • Recherchez MapClientService dans le résultat de la commande dumpsys.
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. Vérifiez que le bon appareil est répertorié. Exemple :

    Liste des appareils Figure 5. Liste des appareils.

  3. Si aucun appareil n'est détecté, effectuez l'une des actions suivantes:

    • Reconnectez-vous au Bluetooth.

    OR

    • Dans les paramètres Bluetooth,vérifiez que l'option SMS est activée.

    OR

    • Sur le téléphone, vérifiez que l'accès à la messagerie est accordé.

Déboguer les bases de données Bluetooth

Car Messenger s'appuie sur la base de données téléphonique. Pour déterminer si le Bluetooth est pour remplir cette base de données, vous pouvez utiliser les commandes du tableau.

Tâche Commande
Conversation adb shell content query--uri content://mms-sms/conversations?simple=true
SMS uniquement adb shell content query--uri content://sms
MMS/SMS adb shell content query--uri content://mms-sms/conversations
MMS uniquement adb shell content query--uri content://mms
Boîte de réception MMS uniquement adb shell content query--uri content://mms/conversations/inbox
Messages envoyés par SMS uniquement adb shell content query--uri content://sms/sent
Boîte de réception SMS uniquement adb shell content query--uri content://sms/conversations/inbox
Partie 1 du MMS
(remplacez 1 par l'ID du MMS)
adb shell content query--uri content://mms/part/1

Déboguer les requêtes de l'assistant vocal et de Car Messenger

Les journaux sont imprimés par défaut si l'image de build est eng ou userdebug. Sinon, pour activer la journalisation pour Car Messenger:

  1. Exécutez la commande pour les balises appropriées adb shell setprop log.tag.<TAG> DEBUG.

  2. Activez la journalisation pour l'Assistant préchargé.

  3. Pour les bugs hautement reproductibles, envisagez d'utiliser des points d'arrêt avec Android Google Marketing Platform Studio.