Yeni ve standart dışı Android özelliklerine yönelik yeni Araç giriş etkinlikleri eklemek için OEM özel girişlerini kullanın. Standart olmayan giriş olayları, genel olacak ve herhangi bir Android yüzeyinde çalışacak şekilde tasarlanmış, ancak OEM'e özgü özellikleri uygulamak üzere genişletilmemiş olan mevcut Android KeyEvent
tarafından eşlenmez. Örneğin, direksiyon simidi kumandasında bulunan ve basıldığında aracın mevcut konumunu içeren bir harita uygulamasını (bir amaç aracılığıyla) açan bir düğme. Bu özellik, sürücülerin sürüş sırasında dikkatleri dağılmadan mevcut konumlarını görselleştirmelerine olanak tanıyor.
Bu makalede, yalnızca özelliği temsil etmek için hiçbir Android KeyEvent
kullanılamadığında kullanılmak üzere bir CustomInputEvent
oluşturmak için mevcut bir Android KeyEvent
nasıl yeniden kullanılacağı açıklanmaktadır.
HW_CUSTOM_INPUT
Bir OEM özel girişi HW_CUSTOM_INPUT ve CustomInputEvent.java ile temsil edilir. HW_CUSTOM_INPUT , araç donanımı (Araç HAL) tarafından başlatılan yerel olaydır. OEM'ler bu olayın nasıl başlatılacağını belirler. HW_CUSTOM_INPUT erişimi, VehiclePropertyAccess:READ
ile [salt okunur]{:.external} olarak ayarlanmıştır.
Araç HAL'sinin her zaman mevcut en son değeri yayınlayabilmesini sağlamak için HW_CUSTOM_INPUT bildirimi, VehiclePropertyChangeMode:ON_CHANGE
ile ON_CHANGE
olarak ayarlanır.
HW_CUSTOM_INPUT değerleri, [global]{:.external} ( VehicleArea:GLOBAL
ile) olarak ayarlanmış bir genel int32
dizisinden oluşur. Üç genel tamsayı şunlardır:
İlk öğe, OEM tarafından tanımlanacak giriş kodunu temsil eder. Herhangi bir semantiği giriş koduyla ilişkilendirebilirsiniz.
İkinci öğe, ana ekran veya küme gibi hedef ekranı saklar.
Üçüncü öğe, olayın kaç kez tekrarlandığını içerir. Örneğin bir tuşa kaç kez basıldığını belirtmek için.
CustomInputEvent ve Araç Giriş API'si
GirişHalService , Araç HAL'sinden gelen bir HW_CUSTOM_INPUT
alan Araç hizmetidir.
GirişHalService, gelen HW_CUSTOM_INPUT
, ilgili yardım arayüzüyle birlikte car-lib/src/android/car/input konumunda bulunan bir Java parçalanabilir sınıfı olan CustomInputEvent
dönüştürür.
Temel bir Araç Giriş hizmeti olan CarInputService , gelen CustomInputEvent'leri alır ve ardından bunları herhangi bir kayıtlı Android sistem hizmetine gönderir.
Gelen CustomInputEvent'leri kaydetmek ve almak için sistem hizmetlerinin şunları yapması gerekir:
CarInputManager.CarInputCaptureCallback#onKeyEvents'i uygulayın.
Giriş türü parametresi olarak
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
ileterek CarInputManager#requestInputEventCapture aracılığıyla kaydolun.Kaydı silmek için hizmetlerin CarInputManager#releaseInputEventCapture öğesini çağırması gerekir.
Aşağıdaki şemada bir OEM Özel Giriş olayının iş akışı gösterilmektedir.
OEM Android sistem hizmetleri
OEM'ler, CarInputService
gelen CustomInputEvent'leri yönetmek için Android sistem hizmetlerini sağlar.
Yalnızca android.permission.INJECT_EVENTS ayrıcalık izniyle işaretlenen hizmetler, Araç Giriş API'sinden ( CarInputManager ) CustomInputEvents'i kaydedebilir ve alabilir. Bu Android sistemi izniyle hiçbir üçüncü taraf hizmeti veya uygulaması imzalanamaz (yalnızca OEM hizmetleri). Bu nedenle hiçbir üçüncü taraf hizmeti veya uygulaması Car Giriş API'sine kaydolamaz.
OEM Android sistem hizmetleri SystemApi
ve genel yöntemlere erişebilir.
Referans uygulaması
Örnek ve kılavuz olarak sağlanan package/services/Car/tests/SampleCustomInputService içindeki referans uygulamaya bakın. Örneğin direksiyon kontrolüne yeni bir düğme eklemek için. Bu yeni düğmeye basıldığında, mevcut araç konumuyla haritalar uygulaması başlatılıyor.
Bu örnekte OEM, bu yeni özelliği (mevcut araç konumuyla haritalar uygulamasını açmak) temsil etmek için INPUT_CODE_F1
(ilk CustomInputEvent
kolaylık işlevi) seçti.
Başlatma sırasında bu hizmet, requestInputEventCapture
aracılığıyla kendisini CarInputManager
kaydeder ( referans uygulama kayıt koduna bakın).
Gelen CustomInputEvent'leri alırken bu hizmet, haritalar uygulamasını başlatma niyetini gönderir. Bunun nasıl başarıldığını öğrenmek için bkz. CustomInputEventListener.java .