از ورودیهای سفارشی OEM برای افزودن رویدادهای جدید ورودی خودرو برای ویژگیهای جدید و غیر استاندارد Android استفاده کنید. رویدادهای ورودی غیر استاندارد توسط Android KeyEvent
موجود نگاشت نمیشوند، که برای عمومی بودن طراحی شده و برای کار بر روی هر سطح Android طراحی شده است، اما برای پیادهسازی ویژگیهای خاص OEM گسترش نیافته است. به عنوان مثال، دکمه ای روی فرمان قرار دارد که با فشار دادن آن، یک برنامه نقشه (از طریق یک intent) با مکان فعلی خودرو باز می شود. این ویژگی به رانندگان این امکان را می دهد تا موقعیت فعلی خود را بدون پرت شدن در حین رانندگی تجسم کنند.
این مقاله نحوه استفاده مجدد از Android KeyEvent
موجود را برای ایجاد CustomInputEvent
برای استفاده تنها در زمانی که هیچ Android KeyEvent
نمیتواند برای نمایش این ویژگی استفاده شود، شرح میدهد.
HW_CUSTOM_INPUT
یک ورودی سفارشی OEM توسط HW_CUSTOM_INPUT و CustomInputEvent.java نمایش داده می شود. HW_CUSTOM_INPUT رویداد بومی است که توسط سخت افزار خودرو (HAL وسیله نقلیه) نمونه سازی شده است. OEM ها نحوه نمونه سازی این رویداد را تعیین می کنند. دسترسی به HW_CUSTOM_INPUT به عنوان [فقط خواندنی]، با VehiclePropertyAccess:READ
تنظیم شده است.
برای اطمینان از اینکه HAL وسیله نقلیه میتواند همیشه آخرین مقدار موجود را پخش کند، اعلان HW_CUSTOM_INPUT بهعنوان ON_CHANGE
تنظیم میشود، با VehiclePropertyChangeMode:ON_CHANGE
.
مقادیر HW_CUSTOM_INPUT از یک آرایه از int32
عمومی تشکیل شده است که به عنوان جهانی تنظیم شده است. سه عدد صحیح عمومی عبارتند از:
اولین عنصر نشان دهنده کد ورودی است که باید توسط OEM تعریف شود. شما می توانید هر معنایی را به کد ورودی مرتبط کنید.
عنصر دوم نمایشگر هدف را ذخیره می کند، مانند نمایشگر اصلی یا خوشه.
عنصر سوم شامل تعداد دفعاتی است که رویداد تکرار شده است. به عنوان مثال، برای نشان دادن چند بار فشار دادن یک دکمه.
CustomInputEvent و Car Input API
InputHalService سرویس خودرویی است که HW_CUSTOM_INPUT
ورودی را از Vehicle HAL دریافت می کند.
InputHalService HW_CUSTOM_INPUT
ورودی را به CustomInputEvent
تبدیل می کند، یک کلاس جاوا که در car-lib/src/android/car/input قرار دارد، همراه با رابط aidl مربوطه.
CarInputService ، یک سرویس اصلی Car Input، CustomInputEvents ورودی را دریافت میکند و سپس آنها را به هر سرویس ثبتشده سیستم Android ارسال میکند.
برای ثبت نام و دریافت CustomInputEvents ورودی، خدمات سیستم باید:
CarInputManager.CarInputCaptureCallback#onKeyEvents را پیاده سازی کنید.
ثبت نام از طریق CarInputManager#requestInputEventCapture ، عبور از
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
به عنوان پارامتر نوع ورودی.برای لغو ثبت، سرویس ها باید CarInputManager#releaseInputEventCapture را فراخوانی کنند.
نمودار زیر گردش کار یک رویداد ورودی سفارشی OEM را نشان می دهد.
خدمات سیستم اندروید OEM
OEMs provide their Android system service to handle incoming CustomInputEvents from CarInputService
.
فقط سرویسهایی که با مجوز امتیاز android.permission.INJECT_EVENTS علامتگذاری شدهاند میتوانند CustomInputEvents را از API ورودی خودرو ( CarInputManager ) ثبت و دریافت کنند. هیچ سرویس یا برنامه شخص ثالثی را نمی توان با این مجوز سیستم Android امضا کرد (فقط خدمات OEM). بنابراین، هیچ سرویس یا برنامه شخص ثالثی نمی تواند در برابر Car Input API ثبت نام کند.
خدمات سیستم اندروید OEM می توانند به SystemApi
و روش های عمومی دسترسی داشته باشند.
پیاده سازی مرجع
به پیاده سازی مرجع در بسته ها/خدمات/Car/tests/SampleCustomInputService مراجعه کنید که به عنوان مثال و راهنما ارائه شده است. به عنوان مثال، برای اضافه کردن یک دکمه جدید در کنترل فرمان. هنگامی که فشار داده می شود، این دکمه جدید برنامه نقشه ها را با مکان فعلی ماشین شروع می کند.
در این مثال، OEM INPUT_CODE_F1
(اولین تابع راحت CustomInputEvent
) را برای نشان دادن این ویژگی جدید (باز کردن برنامه نقشه ها با مکان فعلی ماشین) انتخاب کرد.
در حین راه اندازی، این سرویس خود را در برابر CarInputManager
از طریق requestInputEventCapture
ثبت می کند (به کد ثبت پیاده سازی مرجع مراجعه کنید.
هنگام دریافت CustomInputEvents ورودی، این سرویس قصد راه اندازی برنامه نقشه ها را ارسال می کند. برای اطلاع از نحوه انجام این کار، به CustomInputEventListener.java مراجعه کنید.