Messaggero per auto

Car Messenger offre funzionalità di messaggistica progettate per i dispositivi automobilistici. Come per altre app per auto, gli utenti avviano Auto Messenger da Avvio app.

Novità di Car Messenger?

Con la nuova app Car Messenger, i conducenti:

  • Usufruisci di un'esperienza di messaggistica dedicata.
  • Avvia Auto Messenger da Avvio app.
  • Sfoglia i messaggi ricevuti prima e durante un viaggio.
  • Ascolta e rispondi ai messaggi.
  • Disattiva le notifiche dei messaggi.
  • Avviare nuove conversazioni.

Terminologia

In questa pagina vengono utilizzati questi termini:

Tocca per leggere (TTR)
La funzionalità Tocca per leggere consente agli assistenti vocali di leggere e rispondere SMS per conto di quando l'utente interagisce con le notifiche dei messaggi.

Risposta diretta
Simile a Tocco per leggere, ad eccezione del fatto che l'assistente vocale non legge ad alta voce il ed emette immediatamente una richiesta di risposta.

Invio diretto
Si integra con un assistente vocale per scrivere un nuovo messaggio flusso con o senza un contatto specificato.

Vantaggi delle app non raggruppate

Le app non integrate, come Car Messenger, offrono i seguenti vantaggi:

  • Utilizza solo metodi pubblici (nessuna dipendenza di piattaforma su API nascoste)
  • Sviluppare app al di fuori della piattaforma Android
  • Abilita release più frequenti (per nuove funzionalità e problemi risolti)
  • Aggiornare le app tramite Google Play

Scopri di più sulle app non in bundle.

Dettagli tecnici

Questa sezione descrive l'architettura di Car Messenger. Per saperne di più, vedi Eseguire l'integrazione con CarVoiceInteractionSession.

Architettura basata sulla telefonia

Se accoppiato tramite Bluetooth, i dati vengono sincronizzati dal servizio di telefonia dello smartphone al database di telefonia dell'auto. Allo scollegamento del Bluetooth, i dati sincronizzati vengono eliminati dal pannello dell'auto di telefonia mobile.

Questa funzionalità è stata introdotta in Android 12. La i vantaggi principali includono:

  • I messaggi per gli utenti in blocco possono essere recuperati da un database.
  • Sono supportati i messaggi delle unità precedenti.
  • Utilizza un'architettura e un'API simili per l'archiviazione e il recupero di SMS su Android smartphone.
  • Diventa completamente separata dalla piattaforma Android.

Ecco il flusso:

Flusso di dati basato sulla telefonia Figura 1. Flusso di dati basato sulla telefonia.

Flusso illustrato in formato di testo:

 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.

Ecco come vengono utilizzati i dati:

Utilizzo dei dati di Car Messenger Figura 2. Gestione dati di Car Messenger.

Flusso illustrato in formato di testo:

 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.
  • Al momento della connessione, i dati vengono trasferiti dallo smartphone all'auto tramite Bluetooth MAP.
  • Alla disconnessione, i dati relativi allo smartphone vengono eliminati dal database dell'auto.

Scarica Car Messenger

Ottieni l'ultimo commit di Car Messenger da Google Git.

API per le interazioni vocali

Car Messenger utilizza le API CarVoiceInteractionSession per l'integrazione con come un assistente per le app. Questi elementi sono descritti nelle sezioni che seguono.

Modello PendingIntent

Queste API utilizzano PendingIntent per ritrasmettere le query dell'assistente risolte a Car Messenger.

Questa è la sequenza di eventi:

  1. Car Messenger avvia l'assistente chiamando il numero activity.showAssist(Bundle args). Gli argomenti contengono l'azione dell'API e i relativi parametri obbligatori, contenenti un parametro in attesa di intenzione, se necessario.

  2. L'assistente recupera l'input dell'utente, se necessario, e i pacchetti che in attesa di intento.

  3. L'assistente restituisce l'intent a Car Messenger.

  4. Car Messenger risolve l'azione dell'API.

Contrassegna come azione API letta

Quando l'assistente legge un messaggio, PendingIntent viene inviato all'auto Messenger con l'azione VOICE_ACTION_READ_NOTIFICATION o VOICE_ACTION_READ_CONVERSATION per contrassegnare il messaggio come letto.

Azione API Direct Reply

Quando l'assistente risponde a un messaggio, PendingIntent viene inviato all'auto Messenger con l'azione VOICE_ACTION_REPLY_NOTIFICATION e VOICE_ACTION_REPLY_CONVERSATION per rispondere alla conversazione.

Azione API Direct Send SMS

Un bundle con l'azione VOICE_ACTION_SEND_SMS viene inviato da Car Messenger a come un assistente per le app.

Codice campione:

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

Questa immagine mostra la scrittura di un messaggio quando è selezionato un destinatario:

Pagina Contatti dell&#39;app Telefono Figura 3. Pagina dei contatti nell'app Telefono.

Questa immagine mostra la scrittura di un messaggio quando non è selezionato alcun destinatario utilizzando Nuovo messaggio:

Nessun destinatario selezionato Figura 4. Pulsante Nuovo messaggio nell'app Messenger.

Integra l'azione di invio diretto di SMS

Ecco un esempio di Telefono che integra VOICE_ACTION_SEND_SMS, fornendo dati facoltativi parametri:

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

Miglioramenti a TTR e Risposta diretta

L'API aggiornata ora utilizza una classe Conversation versatile, consentire operazioni oltre l'area di notifica ed estendere le funzionalità nel contesto dell'app. Questo sostituisce il precedente requisito di utilizzare StatusBarNotification corso.

Debug di messaggi in auto

Per ulteriori informazioni sul debug di Car Messenger, consulta le sezioni seguenti.

Esegui il debug delle connessioni Bluetooth

  1. Esegui il comando dumpsys:

    adb shell dumpsys bluetooth_manager
    
    • Cerca MapClientService nell'output comando dumpsys.
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. Verifica che nell'elenco sia presente il dispositivo corretto. Ad esempio:

    Elenco dispositivi Figura 5. Elenco dispositivi.

  3. Se non viene trovato alcun dispositivo, esegui una delle seguenti operazioni:

    • Riconnettiti al Bluetooth.

    OPPURE

    • Nelle Impostazioni Bluetooth,verifica che l'opzione SMS sia attiva.

    OPPURE

    • Sullo smartphone, verifica che sia stato concesso l'accesso ai messaggi.

Debug dei database Bluetooth

Car Messenger è basato sul database delle telefonate. Per determinare se il Bluetooth è popolando il database, puoi usare i comandi della tabella.

Attività Comando
Conversazione adb shell content query--uri content://mms-sms/conversations?simple=true
Solo messaggi SMS adb shell content query--uri content://sms
MMS/SMS adb shell content query--uri content://mms-sms/conversations
Solo messaggi MMS adb shell content query--uri content://mms
Solo posta in arrivo MMS adb shell content query--uri content://mms/conversations/inbox
Solo messaggi inviati via SMS adb shell content query--uri content://sms/sent
Solo posta in arrivo adb shell content query--uri content://sms/conversations/inbox
MMS parte 1
(sostituisci 1 con l'ID dell'MMS)
adb shell content query--uri content://mms/part/1

Debug delle query di Car Messenger e dell'assistente vocale

La stampa dei log avviene per impostazione predefinita se l'immagine di build è eng o userdebug. Altrimenti, per attivare la registrazione per Car Messenger:

  1. Esegui per i tag pertinenti adb shell setprop log.tag.<TAG> DEBUG.

  2. Attiva il logging per l'assistente precaricato.

  3. Per bug altamente riproducibili, valuta l'utilizzo di punti di interruzione con Android Google Studio.