OEM özel girişleri

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:

  1. İlk öğe, OEM tarafından tanımlanacak giriş kodunu temsil eder. Giriş koduyla herhangi bir semantiği ilişkilendirebilirsiniz.

  2. İkinci öğe, hedef ekranı (ör. ana ekran veya küme) depolar.

  3. Üçü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:

Aşağıdaki şemada, bir OEM Özel Giriş etkinliğinin iş akışı gösterilmektedir.

OEM özel giriş iş akışı

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.