Yeni ve standart olmayan Android özellikleri için yeni araba girişi etkinlikleri eklemek üzere OEM özel girişlerini kullanın. Standart olmayan giriş etkinlikleri, genel olacak ve herhangi bir Android yüzeyinde çalışacak şekilde tasarlanmış ancak OEM'ye özgü özellikleri uygulayacak şekilde genişletilmemiş mevcut Android KeyEvent
tarafından eşlenmez. Örneğin, direksiyon simidi kontrolünde bulunan ve basıldığında arabanın mevcut konumuyla bir harita uygulamasını (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ştirmelerini sağlar.
Bu makalede, özelliği temsil etmek için Android KeyEvent
kullanılamadığında yalnızca kullanılacak bir CustomInputEvent
oluşturmak üzere mevcut bir Android KeyEvent
öğesinin 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ı (Vehicle HAL) tarafından oluşturulan yerel etkinliktir. OEM'ler bu etkinliğin nasıl örnekleneceğini belirler. HW_CUSTOM_INPUT'a erişim, VehiclePropertyAccess:READ
ile [salt okunur] olarak ayarlanır.
Araç HAL'inin her zaman mevcut en son değeri yayınlayabilmesi için HW_CUSTOM_INPUT bildirimi ON_CHANGE
olarak ayarlanır ve VehiclePropertyChangeMode:ON_CHANGE
.
HW_CUSTOM_INPUT değerleri, int32
olarak ayarlanmış bir genel dizi
GLOBAL
(VehicleArea:GLOBAL
ile) değerinden oluşur. Üç
genel tam sayı şunlardır:
İlk öğe, OEM tarafından tanımlanacak giriş kodunu temsil eder. Giriş koduyla herhangi bir semantiği ilişkilendirebilirsiniz.
İkinci öğe, hedef ekranı (ör. ana ekran veya küme) depolar.
Üçüncü öğe, etkinliğin tekrarlandığı sayıyı içerir. Örneğin, bir düğmeye kaç kez basıldığını belirtmek için.
CustomInputEvent ve Car Input API
InputHalService, Vehicle HAL'den gelen HW_CUSTOM_INPUT
öğesini alan Car hizmetidir.
InputHalService, gelen HW_CUSTOM_INPUT
öğesini CustomInputEvent
öğesine dönüştürür. Bu, car-lib/src/android/car/input konumunda bulunan bir Java parcelable sınıfıdır ve ilgili aidl arayüzü ile birlikte kullanılır.
Temel bir Araç Giriş hizmeti olan CarInputService, gelen CustomInputEvent'leri alır ve ardından bunları kayıtlı herhangi bir Android sistem hizmetine gönderir.
Sistem hizmetlerinin, CustomInputEvents'i kaydetmek ve almak için:
CarInputManager.CarInputCaptureCallback#onKeyEvents'i uygulayın.
CarInputManager#requestInputEventCapture üzerinden
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
giriş türü parametresini ileterek kaydolun.Hizmetlerin kaydını kaldırmak için CarInputManager#releaseInputEventCapture'ı çağırmaları gerekir.
Aşağıdaki şemada, bir OEM Özel Giriş etkinliğinin iş akışı gösterilmektedir.
OEM Android sistem hizmetleri
OEM'ler, CarInputService
'dan gelen CustomInputEvents'i işlemek için Android sistem hizmetlerini sağlar.
Yalnızca android.permission.INJECT_EVENTS ayrıcalık izniyle işaretlenen hizmetler, Car Input API'den (CarInputManager) CustomInputEvents kaydedip alabilir. Hiçbir üçüncü taraf hizmeti veya uygulaması bu Android sistem izniyle imzalanmaz (yalnızca OEM hizmetleri). Bu nedenle, hiçbir üçüncü taraf hizmeti veya uygulaması Car Input API'ye karşı kayıt yapamaz.
OEM Android sistem hizmetleri, SystemApi
ve herkese açık yöntemlere erişebilir.
Referans uygulama
packages/services/Car/tests/SampleCustomInputService adresindeki referans uygulamasına bakın. Bu uygulama, örnek ve yönerge olarak sağlanır. Örneğin, direksiyon kontrolüne yeni bir düğme eklemek için. Bu yeni düğmeye basıldığında, haritalar uygulaması mevcut araba konumuyla başlatılır.
Bu örnekte OEM, bu yeni özelliği (Haritalar uygulamasını mevcut araba konumuyla açma) temsil etmek için INPUT_CODE_F1
(ilk CustomInputEvent
kolaylık işlevi) öğesini seçti.
Bu hizmet, başlatma sırasında CarInputManager
üzerinden requestInputEventCapture
ile kendini kaydeder (bkz. referans uygulama kayıt kodu).
Bu hizmet, gelen CustomInputEvent'leri aldığında haritalar uygulamasını başlatma amaçlı bir niyet gönderir. Bunun nasıl yapıldığını öğrenmek için CustomInputEventListener.java dosyasına bakın.