Araba Habercisi

Car Messenger, otomotiv cihazları için tasarlanmış mesajlaşma yetenekleri sunar. Diğer araba uygulamaları gibi, kullanıcılar da Car Messenger'ı başlatıcıdan başlatır.

Car Messenger'daki yenilikler neler?

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ı dinleyin ve yanıtlayın.
  • Mesaj bildirimlerini sessize alın.
  • Yeni konuşmalar başlatın.

Terminoloji

Bu sayfada şu terimler kullanılmaktadır:

Dokunarak Okuma (TTR)
Dokun-Oku, kullanıcı mesaj bildirimleriyle etkileşimde bulunduğunda sesli asistanların o kullanıcı adına metin mesajlarını okumasına ve yanıtlamasına olanak tanır.

Doğrudan Yanıt
Dokunarak Oku'ya benzer; tek fark, sesli asistanın mesajı sesli olarak okumaması ve hemen bir yanıt istemi vermesidir.

Doğrudan Gönder
Belirli bir kişiyle veya belirli bir kişi olmadan yeni bir mesaj akışı oluşturmak için sesli asistanla bütünleşir.

Paketlenmemiş uygulamaların avantajları

Car Messenger gibi ayrı uygulamalar şu avantajları sağlar:

  • Yalnızca genel yöntemleri kullanır (gizli API'lere platform bağımlılığı yoktur)
  • Android platformunun dışında uygulamalar geliştirin
  • Daha sık sürümleri etkinleştirin (yeni özellikler ve düzeltilen sorunlar için)
  • Uygulamaları Google Play aracılığıyla güncelleyin

Paketlenmemiş uygulamalar hakkında daha fazla bilgi edinin.

Teknik detaylar

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

Telefon tabanlı mimari

Bluetooth üzerinden eşleştirildiğinde veriler telefonun telefon veri tabanından aracın telefon veri tabanına senkronize edilir. Bluetooth bağlantısı kesildiğinde senkronize edilen veriler aracın telefon veri tabanından silinir.

Bu özellik Android 12'de kullanıma sunuldu. Başlıca avantajları şunlardır:

  • Toplu kullanıcı mesajları bir veritabanından alınabilir.
  • Önceki sürücü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.

İşte akış:

Telefon tabanlı veri akışı Şekil 1. Telefon tabanlı veri akışı.

Metin formatında 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.

İşte verilerle yaptığımız şey:

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

Metin formatında 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ğlanıldığında veriler Bluetooth MAP kullanılarak telefondan araca aktarılır.
  • Bağlantı kesildiğinde o telefona ait veriler aracın veri tabanından silinir.

Car Messenger'ı edinin

Google Git'ten en son Car Messenger taahhüdünü alın.

Sesli etkileşim API'leri

Car Messenger, asistanla entegre olmak için CarVoiceInteractionSession API'lerini kullanıyor. Bu unsurlar aşağıdaki bölümlerde açıklanmaktadır.

PendingIntent modeli

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

Bu olayların sırası:

  1. Car Messenger, activity.showAssist(Bundle args) öğesini çağırarak asistanı başlatır . Bağımsız değişkenler, API eylemini ve bunun gerekli parametrelerini içerir ve gerekirse beklemedeki bir amacı da içerir.

  2. Asistan, gerekirse kullanıcı girdisini alır ve bunu bekleyen niyetle paketler.

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

  4. Car Messenger, API eylemini çözer .

Okundu API'si olarak işaretle eylemi

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

Doğrudan Yanıt API'si eylemi

Asistan bir mesaja yanıt verirken, konuşmayı yanıtlamak için VOICE_ACTION_REPLY_NOTIFICATION ve VOICE_ACTION_REPLY_CONVERSATION eylemiyle PendingIntent Car Messenger'a gönderilir.

Doğrudan Gönderim SMS API işlemi

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

Basit 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 resim, bir alıcı seçildiğinde mesaj oluşturmayı göstermektedir:

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

Bu resimde Yeni Mesaj kullanılarak hiçbir alıcı seçilmediğinde mesaj oluşturulması gösterilmektedir:

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

Doğrudan Gönderim SMS eylemini entegre edin

İsteğe bağlı parametreler sağlayarak VOICE_ACTION_SEND_SMS entegre eden Çeviricinin bir örneğini burada bulabilirsiniz:

    /**
     * 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ıtla ilgili geliştirmeler

Güncellenen API artık çok yönlü bir Conversation sınıfını kullanıyor ve bildirim alanının ötesindeki işlemlere olanak tanıyor ve uygulamanın bağlamı içindeki yetenekleri genişletiyor. Bu, StatusBarNotification sınıfını kullanmanın önceki gereksiniminin yerini alır.

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

    Aygıt listesi Şekil 5. Cihaz listesi.

  3. Hiçbir aygıt 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şiminin verildiğini onaylayın.

Bluetooth veritabanlarında hata ayıklama

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

Görev Emretmek
Konuşma 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ı bölüm 1
( 1 MMS kimliğiyle değiştirin)
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 takdirde, Car Messenger'da günlüğe kaydetmeyi 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üğe kaydetmeyi etkinleştirin.

  3. Tekrarlanabilirliği yüksek hatalar için Android Studio ile kesme noktaları kullanmayı düşünün.