Car Messenger

Car Messenger, otomotiv 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 elde edin.
  • Car Messenger'ı başlatıcıdan başlatın.
  • Sürüşten önce ve sürüş sırasında alınan mesajlara göz atma
  • Mesajları dinleme ve yanıtlama
  • İleti bildirimlerini yoksayabilirsiniz.
  • Yeni sohbetler başlatma

Terminoloji

Bu sayfada kullanılan terimler:

Okumak için dokunma (TTR)
Tap-to-Read, kullanıcı mesaj bildirimleriyle etkileşim kurduğunda sesli asistanların bu kullanıcı adına kısa mesajları okuyup yanıtlamasına olanak tanır.

Hızlı Yanıt
Sesli oku özelliğine benzer. Ancak sesli asistan, mesajı okumaz ve hemen yanıt istemi gönderir.

Doğrudan Gönderme
Belirtilen bir kişiyle veya belirtilen bir kişi olmadan yeni bir mesaj akışı oluşturmak için sesli asistanla entegre olur.

Paketlenmemiş uygulamaların avantajları

Car Messenger gibi ayrı uygulamalar şu avantajları sunar:

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

Ayrı olarak sunulan uygulamalar hakkında daha fazla bilgi edinin.

Teknik ayrıntılar

Bu bölümde, Car Messenger mimarisi açıklanmaktadır. Daha fazla bilgi için CarVoiceInteractionSession ile entegrasyon başlıklı makaleyi inceleyin.

Telefon tabanlı mimari

Bluetooth üzerinden eşlendiğinde veriler, telefonun telefon görüşmesi veritabanından arabanın telefon görüşmesi veritabanına senkronize edilir. Bluetooth bağlantısı kesildiğinde senkronize edilen veriler arabanın telefon veritabanından silinir.

Bu özellik Android 12'de kullanıma sunulmuştur. Başlıca avantajları:

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

İşlem akışı şu şekildedir:

Telefon görüşmesine dayalı veri akışı Şekil 1. Telefon görüşmesine dayalı 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 ilgili işlemlerimiz:

Car Messenger veri kullanımı Şekil 2. Araba Mesajlaşma Aracı'nda veri 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 kullanılarak telefondan arabaya aktarılır.
  • Bağlantı kesildiğinde, ilgili telefona ait veriler arabanın veritabanından silinir.

Car Messenger'ı edinme

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

Sesli etkileşim API'leri

Car Messenger, asistana entegre olmak için CarVoiceInteractionSession API'lerini kullanır. Bu öğeler aşağıdaki bölümlerde açıklanmıştır.

PendingIntent modeli

Bu API'ler, çözümlenen asistan sorgularını Car Messenger'a geri iletmek için PendingIntent kullanır.

Etkinliklerin sırası şöyledir:

  1. Araç Mesajlaşma Uygulaması, activity.showAssist(Bundle args)'ı arayarak Asistan'ı başlatır. Args, API işlemini ve gerekli parametrelerini içerir. Gerekirse bekleyen bir amaç da içerir.

  2. Asistan, gerekirse kullanıcı girişini alır ve beklemede olan intent ile birlikte paketler.

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

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

Okundu olarak işaretle API işlemi

Asistan bir mesajı okurken, mesajı okundu olarak işaretlemek için PendingIntent, VOICE_ACTION_READ_NOTIFICATION veya VOICE_ACTION_READ_CONVERSATION işlemiyle birlikte Car Messenger'a gönderilir.

Direct Reply API işlemi

Asistan bir iletiyi yanıtlarken PendingIntent, VOICE_ACTION_REPLY_NOTIFICATION işlemi ve ileti dizisini yanıtlamak için VOICE_ACTION_REPLY_CONVERSATION ile birlikte Car Messenger'a gönderilir.

Direct Send SMS API işlemi

Car Messenger'dan asistana VOICE_ACTION_SEND_SMS işlemi içeren bir paket gönderilir.

Örnek kod:

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

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

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

Bu resimde, Yeni İleti seçeneği kullanılarak alıcı seçilmeden ileti oluşturma işlemi gösterilmektedir:

Alıcı seçilmedi Şekil 4. Messenger uygulamasındaki Yeni Mesaj düğmesi.

Doğrudan SMS gönderme işlemini entegre edin

Aşağıda, isteğe bağlı parametreler sağlayan VOICE_ACTION_SEND_SMS ile entegre olan Arama Uygulaması'nın örneği verilmiştir:

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

Tıklama-yanıtlama oranı ve doğrudan yanıtlama özelliklerinde iyileştirmeler

Güncellenen API artık çok yönlü bir Conversation sınıfı kullanıyor. Bu sayede, bildirim alanının ötesinde işlemler yapılmasına ve uygulamanın bağlamındaki özelliklerin genişletilmesine olanak tanınıyor. Bu, StatusBarNotification sınıfını kullanma zorunluluğunun yerini alır.

Debug Car Messenger

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 ifadesini arayın.
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. Doğru cihazın listelendiğini onaylayın. Örneğin:

    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 doğrulayın.

    VEYA

    • Telefonda Mesaj erişimi izninin verildiğini onaylayın.

Bluetooth veritabanlarında hata ayıklama

Araç Mesajlaşma, telefon veritabanı üzerine kurulmuştur. Bluetooth'un bu veritabanını doldurup doldurmadığını belirlemek için tablodaki komutları kullanabilirsiniz.

Task 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 gönderilen SMS 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ı bölüm 1
(1 yerine MMS'nin kimliğini girin)
adb shell content query --uri content://mms/part/1

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

Derleme resmi eng veya userdebug ise günlükler varsayılan olarak yazdırılır. Aksi takdirde, Araç Mesajlaşma Aracı'nda günlük kaydını etkinleştirmek için:

  1. İlgili etiketler için çalıştırın adb shell setprop log.tag.<TAG> DEBUG.

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

  3. Kolayca yeniden üretilebilen hatalar için Android Studio ile kesme noktalarını kullanabilirsiniz.