Bu bölümde, Kontrol Merkezi referans uygulamasına özgü teknik ayrıntılar verilmektedir.
Kontrol Merkezi, minimum SDK sürümü 35 (Android V (API düzeyi 35)) gerektiren, paketlenmemiş, ayrıcalıklı ve sistem tarafından imzalanmış bir uygulamadır. System APIs özelliğini kullanmak için uygulama system/priv-app konumuna yüklenir. Uygulamanın medya bilgilerini okuyabilmesi için platform imzalı olması gerekir. Uygulamayı kablosuz olarak (OTA) güncelleyebilirsiniz.
Arka plan hizmeti
Kontrol Merkezi uygulaması, işlevselliği için arka plan hizmetine bağlıdır.
Control Center Service, Vendor ServiceController tarafından kullanıcı yaşam döngüsünün user-post-unlocked durumunda başlatılır. Kontrol Merkezi her zaman etkin olmalı ve arka planda iletişim kurmalıdır. Uygulama, kullanıcının uygulamayı açmasına bağlı olamaz.
Control Center Service, Communication API'yi kullanarak diğer yolcu bölgelerindeki diğer örnekleriyle bağlantı kurar ve iletişim kurar. Her kullanıcının Kontrol Merkezi örneklerinin nasıl bağlantı kurduğunu ve veri gönderip aldığını anlamak için entegrasyon kılavuzunu okumanız gerekir.
İletişim
Bağlandıktan sonra Control Center Service, bilgi aktaran protobuf nesneleriyle iletişim kurar. protobuf'yı Communication APIs ile başka bir yolcu bölgesine aktarmak için protobuf, byte array'ye dönüştürülür, payload object oluşturulur ve Payload, CarOccupantConnectionManager#sendPayload üzerinden gönderilir.
message ControlCenterPayload {
required Type messageType = 1;
// ...
enum Type {
MEDIA_STATUS = 0;
MEDIA_COMMAND = 1;
INPUT_LOCK_COMMAND = 2;
INPUT_LOCK_SUCCESSFUL = 3;
CANCEL_AUDIO_REQUEST = 4;
MIRRORING_REQUEST_RECEIVER_DECISION = 5;
MIRRORING_SESSION_ENDED = 6;
}
}
private fun parsePayload(
senderZone: OccupantZoneInfo,
payload: Payload
) {
val parsedPayload =
ControlCenterPayload.parseFrom(payload.bytes)
when (parsedPayload.messageType) {
ControlCenterPayload.Type.MEDIA_STATUS -> {
// logic here
}
}
//…
}
Veriler
Yolcu bölgeleriyle ilgili bilgiler, Kontrol Merkezi'nde OccupantZoneData nesneleri şeklinde saklanır. Yerel OccupantZoneData dosyasında yapılan değişiklikler, Comms API üzerinden diğer Kontrol Merkezi örneklerine gönderilir.
Alınan Payload ayrıştırıldığında, ayrıştırılan veriler yerel OccupantZoneStateRepository öğesine iletilir. Bu öğe de görünümlere değişikliği bildirir. Verilerin çoğu, sınıflar arasında Kotlin flows on Android ile aktarılır.
Kabin hoparlöründen gelen ses isteklerini yönetme
Sürücü, oluşturulduğunda Control Center Service yolcuların kabin hoparlörlerinde ses çalma isteklerini her zaman alabilmesi için Primary ZoneMedia Audio RequestCallback kaydeder.
Geri arama, CarAudioManager#requestMediaAudioOnPrimaryZone numarasına yapılan aramalar konusunda bilgilendirilir. Sürücü, Control Center Service aracılığıyla istekleri CarAudioManager#allowMediaAudioOnPrimaryZone(boolean) üzerinden kabul edilebilen veya reddedilebilen bir uyarı bildirimi (HUN) oluşturarak işler.
Diğer ekranlarla birlikte video izleme
Birlikte izleme özelliği, CarActivityManager içindeki Task Mirroring APIs sayesinde çalışır. TaskMirroringManager önce oynatılan MediaSession uygulamasının CarActivityManager#getVisibleTasks içindeki paketini arar, ardından VirtualDisplay oluşturur ve görünür görevi CarActivityManager#moveRootTaskToDisplay aracılığıyla bu ekrana taşır.
Bu, MirroredSurfaceView öğesinin görevi MirroredSurfaceView#mirrorSurface üzerinden göstermek için bir düzende kullanabileceği bir IBinder jetonu döndürür.
Communication API Payload nesnesi, jetonu diğer işgal bölümlerine iletti.
Bu işgalci bölgelerindeki her bir Kontrol Merkezi örneği bir Mirroring activity başlatır ve MirroredSurfaceView'yi doldurmak için bu jetonu kullanır.
Görev yansıtma API'leri
Denetim Merkezi şu görev yansıtma API'lerini kullanır:
CarActivityManager#getVisibleTasks(int displayId)<ActivityManager.RunningTaskInfo>, gönderenin görünen adı için arandı.CarActivityManager#moveRootTaskToDisplay(int virtualDisplayId)CarActivityManager#createTaskMirroringToken(int taskId)IBinder jetonunu yansıtacak bir görev oluşturur ve görev sanal ekrana taşındıktan sonra çağrılmalıdır.MirroredSurfaceView#mirrorSurface(IBinder token)Denetim Merkezi'nde görev yansıtmayla ilgili sınırlamalar
Kontrol Merkezi yalnızca MediaSession uygulamalarında görev yansıtmayı destekler.
Ancak API, herhangi bir görevi yansıtabilir. Sanal ekran, gönderen ekranının boyutlarıyla oluşturulur. Alıcının ekranı farklı çözünürlükler ve boyutlar kullanıyorsa sanal ekran, ekranın ortasında görünür.
Yüzeyde görünen görevler
Kontrol Merkezi, şasiyi Theme.CarUi.NoToolbar yarı saydam bir pencere olacak şekilde genişletir. Bu, bir görev üzerinde Kontrol Merkezi açıldığında görevin CarActivityManager#getVisibleTasks içinde döndürüldüğü anlamına gelir. Bu sayede görev yansıtılabilir.
Yansıtma bilgilerini alma
Kontrol Merkezi, diğer uygulamaları yansıtma oturumları hakkında bilgilendirir. Güncellemeleri alabilmek için uygulamaların Control Center Service hizmetine bağlanması ve Control
Center Service hizmetinden Messages alan ve işleyen bir Handler sınıfı göndermesi gerekir.
İstemci uygulamaları, yansıtılan uygulamanın paket adını alabilir ve yansıtılan uygulamayı barındıran Kontrol Merkezi'ndeki etkinlik için şu anahtarlarla bir intent URI başlatabilir:
_config_msg_mirroring_pkg_name_key__config_msg_mirroring_redirect_uri_key_
Bu yapılandırmalar, istemci uygulaması kaynaklarında ve Kontrol Merkezi kaynaklarında bulunmalıdır.
Hata Ayıklama Kontrol Merkezi
Logger sınıfı, günlükleri zorunlu kılacak şekilde yapılandırılabilen Kontrol Merkezi günlüklerini işler.
class Logger(cls: Class<*>) {
companion object {
private const val FORCE_LOGS = false
}
private val tag: String
init {
tag = cls.simpleName
}
fun v(message: String) {
if (Log.isLoggable(tag, Log.VERBOSE) || FORCE_LOGS) {
Log.v(tag, message)
}
}
...
Sistem uygulaması ve güncellenebilirlik
Kontrol Merkezi, yalnızca imza izinlerinin kullanılması nedeniyle sistem uygulaması ve platform imzalı olduğundan Kontrol Merkezi'nin cihaza önceden yüklenmesi gerekir ve Araba Medya Uygulaması'na benzer şekilde yalnızca OTA üzerinden güncellenebilir.
Kontrol Merkezi'ni kaynaktan derleme
Denetim Merkezi kaynak kodunu edinmek için Ayrı olarak sunulan uygulamaları entegre etme başlıklı makaleyi inceleyin.
Çoklu ekranlarda kullanıcı gizliliği
Kontrol Merkezi, araçtaki tüm yolcuların tüm ekranlarda medya bilgilerini görüntülemesine olanak tanır. Google, kullanıcıları bilgilendirmek için engelleyici olmayan bir Gizlilik Uyarısı eklemenizi önerir. Google, bunu bir ekranda oturum açtığınızda sistem düzeyinde yapmanızı önerir.