Araba Messenger

Car Messenger, otomobil cihazları için tasarlanmış mesajlaşma özellikleri sunar. Diğer araba uygulamalarında olduğu gibi, kullanıcılar Car Messenger'ı başlatıcıdan başlatır.

Car Messenger'daki yenilikler

Yeni Car Messenger uygulamasıyla sürücüler:

  • Özel bir mesajlaşma deneyimi yaşayın.
  • Başlatıcıdan Car Messenger'ı başlatın.
  • Sürüşten önce ve sürüş sırasında alınan mesajlara göz atın.
  • Mesajları dinleme ve yanıtlama
  • İleti bildirimlerini yoksayın.
  • Yeni görüşmeler başlatabilirsiniz.

Terminoloji

Bu sayfada şu terimler kullanılır:

Okumak İçin Dokun (TTR)
Dokun ve Oku, sesli asistanların okumasını ve yanıt vermesini sağlar adına kısa mesajlar Kullanıcı mesaj bildirimleriyle etkileşime geçtiğinde söz konusu kullanıcı.

Doğrudan Yanıt
Dokunarak Okuma'ya benzer, ancak sesli asistan mesajı görüntülenir ve hemen bir yanıt istemi gönderilir.

Doğrudan Gönderme
Yeni bir mesaj oluşturmak için sesli asistanla entegre olur belirli bir kişiyle ya da belirli bir kişiyle ilişkisi olmadan.

Paket halinde olmayan uygulamaların avantajları

Araba Messenger gibi grup halinde olmayan uygulamalar şu avantajları sağlar:

  • Yalnızca herkese açık yöntemler kullanır (gizli API'lere platform bağımlılığı yoktur)
  • Android platformu dışında uygulama geliştirme
  • Daha sık sürümleri etkinleştirme (yeni özellikler ve düzeltilen sorunlar için)
  • Uygulamaları Google Play üzerinden güncelleme

Paket halinde olmayan uygulamalar hakkında daha fazla bilgi edinin.

Teknik ayrıntılar

Bu bölümde Car Messenger mimarisi açıklanmaktadır. Daha fazla bilgi edinmek için bkz. CarVoiceEngagementSession ile entegre edin.

Telefon tabanlı mimari

Bluetooth üzerinden eşlendiğinde, veriler telefonun telefon iletisinden senkronize edilir veritabanına eklemesi gerekir. Bluetooth bağlantısı kesildiğinde, senkronize edilen veriler arabanın sunuyor.

Bu özellik Android 12'de kullanıma sunulmuştur. İlgili içeriği oluşturmak için kullanılan bazı temel avantajları şunlardır:

  • Toplu kullanıcı mesajları, bir veritabanından alınabilir.
  • Önceki sürüşlerden gelen mesajlar destekleniyor.
  • Android'de SMS depolama ve alma için benzer bir mimari ve API kullanır için de geçerlidir.
  • Android platformundan tamamen ayrılır.

Akış şöyledir:

Telefona dayalı veri akışı. Şekil 1. Telefon temelli veri akışı.

Metin biçiminde gösterilen akış:

 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.

Verilerle şunları yaparız:

Car Messenger veri kullanımı. Şekil 2. Araba Messenger verileri işleme.

Metin biçiminde gösterilen akış:

 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.
  • Bağlantı kurulduğunda, veriler Bluetooth MAP aracılığıyla telefondan arabaya aktarılır.
  • Bağlantı kesildiğinde, bu telefonun verileri arabanın veritabanından silinir.

Araba Messenger'ı edinin

Google Git'ten en son Car Messenger kaydını alın.

Ses etkileşimi API'leri

Car Messenger, yardımcı olur. Bu öğeler aşağıdaki bölümlerde açıklanmaktadır.

PendingIntent modeli

Bu API'ler, çözümlenen asistan sorgularını kullanıcıya geri iletmek için PendingIntent yöntemini kullanır Araba için Messenger.

Etkinliklerin sırası şu şekildedir:

  1. Car Messenger, activity.showAssist(Bundle args) numaralı telefonu arayarak Asistan'ı başlatır. Bağımsız değişkenler, API işlemini ve bekleme amacı gütmeyin.

  2. Asistan, gerekirse kullanıcı girişini alır ve bunu beklemedeki niyete göre belirleniyor.

  3. Asistan, niyeti Car Messenger'a geri gönderir.

  4. Car Messenger, API işlemini çözür.

Okundu API işlemi olarak işaretle

Asistan bir mesaj okurken PendingIntent Arabaya gönderilir VOICE_ACTION_READ_NOTIFICATION veya İletiyi okundu olarak işaretlemek için VOICE_ACTION_READ_CONVERSATION.

Direct Reply API işlemi

Asistan bir mesajı yanıtlarken PendingIntent Arabaya gönderilir VOICE_ACTION_REPLY_NOTIFICATION ve VOICE_ACTION_REPLY_CONVERSATION: İleti dizisini yanıtlamak için.

Direct Send SMS API işlemi

Car Messenger'dan VOICE_ACTION_SEND_SMS işlemini içeren bir paket yardımcı olur.

Örnek kod:

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

Bu resimde, bir alıcı seçildiğinde ileti oluşturma işlemi gösterilmektedir:

Çevirici uygulamasının Kişiler sayfası. Şekil 3. Çevirici uygulamasındaki Kişiler sayfası.

Bu resimde, Yeni Mesaj:

Seçili alıcı yok. Şekil 4. Messenger uygulamasında Yeni Mesaj düğmesi.

Doğrudan Gönderme SMS işlemini entegre et

VOICE_ACTION_SEND_SMS ile entegre edilen Çevirici'nin isteğe bağlı olarak sağlandığı bir örnek. parametre:

    /**
     * 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 ve Doğrudan Yanıt ile ilgili geliştirmeler

Güncellenen API artık çok yönlü bir Conversation sınıfı kullanıyor. Bildirim alanının ötesinde işlemlere izin verme ve özellikleri genişletme bir kontrol listesidir. Bu, StatusBarNotification sınıf.

Araba Messenger'da hata ayıklama

Car Messenger'da hata ayıklama hakkında daha fazla bilgi edinmek için aşağıdaki bölümlere bakın.

Bluetooth bağlantılarında hata ayıklama

  1. dumpsys komutunu çalıştırın:

    adb shell dumpsys bluetooth_manager
    
    • dumpsys komut çıkışında MapClientService araması yapın.
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. Doğru cihazın listelendiğinden emin olun. Örnek:

    Cihaz listesi. Şekil 5. Cihaz listesi.

  3. Cihaz bulunamazsa aşağıdakilerden birini yapın:

    • Bluetooth'a yeniden bağlanın.

    VEYA

    • Bluetooth Ayarları'nda Kısa Mesaj'ın açık olduğunu onaylayın.

    VEYA

    • Telefonda, Mesaj Erişimi'nin verildiğini onaylayın.

Bluetooth veritabanlarında hata ayıklama

Car Messenger, telefon verileri veritabanı üzerine kurulmuştur. Bluetooth'un sonra tablodaki komutları kullanabilirsiniz.

Görev Komut
Görüşme adb shell content query--uri content://mms-sms/conversations?simple=true
Yalnızca SMS mesajları adb shell content query--uri content://sms
MMS/SMS mesajları adb shell content query--uri content://mms-sms/conversations
Yalnızca MMS mesajları adb shell content query--uri content://mms
Yalnızca MMS gelen kutusu adb shell content query--uri content://mms/conversations/inbox
Yalnızca SMS gönderilen mesajlar adb shell content query--uri content://sms/sent
Yalnızca SMS gelen kutusu adb shell content query--uri content://sms/conversations/inbox
MMS mesajı 1. bölüm
(1 yerine MMS'in kimliğini yazın)
adb shell content query--uri content://mms/part/1

Car Messenger ve sesli asistan sorgularında hata ayıklama

Derleme görüntüsü eng veya userdebug ise günlükler varsayılan olarak yazdırılır. Aksi halde, Car Messenger için günlük kaydını etkinleştirmek üzere:

  1. Alakalı etiketleri adb shell setprop log.tag.<TAG> DEBUG çalıştırın.

  2. Önceden Yüklenmiş Asistan için günlük kaydını etkinleştirin.

  3. Yüksek düzeyde tekrarlanabilir hatalar için Android cihazlarda ayrılma noktaları kullanmayı düşünün. Studio'da oturum açın.