ورودی های سفارشی OEM

از ورودی‌های سفارشی 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 عمومی تشکیل شده است که به عنوان جهانی تنظیم شده است. سه عدد صحیح عمومی عبارتند از:

  1. اولین عنصر نشان دهنده کد ورودی است که باید توسط OEM تعریف شود. شما می توانید هر معنایی را به کد ورودی مرتبط کنید.

  2. عنصر دوم نمایشگر هدف را ذخیره می کند، مانند نمایشگر اصلی یا خوشه.

  3. عنصر سوم شامل تعداد دفعاتی است که رویداد تکرار شده است. به عنوان مثال، برای نشان دادن چند بار فشار دادن یک دکمه.

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 ورودی، خدمات سیستم باید:

نمودار زیر گردش کار یک رویداد ورودی سفارشی OEM را نشان می دهد.

گردش کار ورودی سفارشی 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 مراجعه کنید.