Car Messenger, otomotiv cihazlar için tasarlanmış mesajlaşma özellikleri sunar. Diğer araç uygulamaları gibi Car Messenger da başlatıcıdan başlatılır.
Car Messenger'daki yenilikler
Yeni Car Messenger uygulamasıyla sürücüler:
- Özel bir mesajlaşma deneyimi yaşayın.
- Araç Messenger'ı başlatıcıdan başlatın.
- Sürüşten önce ve sürüş sırasında alınan mesajlara göz atın.
- Mesajları dinleyip yanıtlayabilirsiniz.
- İleti bildirimlerini kapatabilirsiniz.
- Yeni görüşmeler başlatabilirsiniz.
Terminoloji
Bu sayfada şu terimler kullanılmaktadır:
Paketten çıkarılan uygulamaların avantajları
Car Messenger gibi paketten çıkarılmış uygulamalar aşağıdaki avantajları sunar:
- Yalnızca herkese açık yöntemleri kullanır (gizli API'lere platform bağımlılığı yoktur)
- Android platformunun dışında uygulama geliştirme
- Daha sık sürüm yayınlama (yeni özellikler ve düzeltilen sorunlar için)
- Uygulamaları Google Play üzerinden güncelleme
Gruplandırılmamış 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 veritabanından aracın telefon veritabanına senkronize edilir. Bluetooth bağlantısı kesildiğinde senkronize edilen veriler aracın telefon veritabanından silinir.
Bu özellik Android 12'de kullanıma sunulmuştur. Temel avantajlar şunlardır:
- Toplu kullanıcı iletileri bir veritabanından alınabilir.
- Önceki sürüşlerdeki mesajlar desteklenir.
- Android telefonlarda SMS depolama ve alma için benzer bir mimari ve API kullanır.
- Android platformundan tamamen ayrılır.
Akış şu şekildedir:
Şekil 1. Telefona 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 şunları yaparız:
Şekil 2. Car Messenger verilerinin işlenmesi.
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ı kurulduktan sonra veriler Bluetooth MAP kullanılarak telefondan araca aktarılır.
- Bağlantı kesildiğinde, söz konusu telefonun verileri aracın veritabanından silinir.
Car Messenger'ı edinme
Google Git'ten en son Car Messenger gönderimini alın.
Sesli etkileşim API'leri
Car Messenger, asistanla entegrasyon 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ülmüş asistan sorgularını Car Messenger'a geri iletmek için PendingIntent
kullanır.
Olayların sırası şu şekildedir:
Car Messenger,
activity.showAssist(Bundle args)
adresini arayarak Asistan'ı başlatır. args, API işlemini ve gerekli parametrelerini içerir. Gerekirse bekleyen bir intent de içerir.Asistan gerekirse kullanıcı girişini alır ve bekleyen niyetle paketler.
Asistan, niyeti Car Messenger'a geri gönderir.
Car Messenger, API işlemini çözer.
Okundu olarak işaretle API işlemi
Asistan bir mesajı okurken PendingIntent
, Car Messenger'a VOICE_ACTION_READ_NOTIFICATION
veya VOICE_ACTION_READ_CONVERSATION
işlemiyle gönderilir. Bu işlem, mesajı okundu olarak işaretler.
Direct Reply API işlemi
Asistan bir mesajı yanıtlarken PendingIntent
, Car Messenger'a VOICE_ACTION_REPLY_NOTIFICATION
işlemi ve görüşmeyi yanıtlamak için VOICE_ACTION_REPLY_CONVERSATION
ile birlikte gönderilir.
Direct Send SMS API işlemi
Car Messenger'dan asistana VOICE_ACTION_SEND_SMS
işlemini içeren bir paket gönderilir.
Ö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:
Şekil 3. Telefon uygulamasındaki Kişiler sayfası.
Bu resimde, Yeni İleti kullanılarak alıcı seçilmediğinde ileti oluşturma işlemi gösterilmektedir:
Şekil 4. Messenger uygulamasındaki Yeni Mesaj düğmesi.
Doğrudan SMS gönderme işlemini entegre etme
Aşağıda, VOICE_ACTION_SEND_SMS
'yi entegre eden ve isteğe bağlı parametreler sağlayan Telefon uygulaması ö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;
}
TTR ve Doğrudan Yanıt'ta yapılan iyileştirmeler
Güncellenen API artık çok yönlü bir Conversation
sınıfı kullanıyor. Bu sınıf, bildirim alanının ötesinde işlemlere olanak tanır ve uygulama bağlamındaki özellikleri genişletir. Bu, önceki StatusBarNotification
sınıfını kullanma şartının yerini almıştır.
Car 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
dumpsys
komutunu çalıştırın:adb shell dumpsys bluetooth_manager
- dumpsys komutu çıkışında
MapClientService
değerini arayın.
Profile: MapClientService mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
- dumpsys komutu çıkışında
Doğru cihazın listelendiğini onaylayın. Örnek:
Şekil 5. Cihaz listesi.
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ını hata ayıklama
Car Messenger, telefon veritabanı üzerine kuruludur. Bluetooth'un bu veritabanını doldurup doldurmadığını belirlemek için 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 ile 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'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, Car Messenger için günlük kaydını etkinleştirmek üzere:
İlgili etiketler
adb shell setprop log.tag.<TAG> DEBUG
için çalıştırın.Önceden yüklenmiş Asistan için günlük kaydını etkinleştirin.
Yüksek oranda yeniden üretilebilir hatalar için Android Studio ile kesme noktalarını kullanabilirsiniz.