नई और स्टैंडर्ड के मुताबिक न होने वाली Android सुविधाओं के लिए, कार इनपुट के नए इवेंट जोड़ने के लिए OEM कस्टम इनपुट का इस्तेमाल करें. मौजूदा Android KeyEvent
, नॉन-स्टैंडर्ड इनपुट इवेंट को मैप नहीं करता. इसे सामान्य तौर पर डिज़ाइन किया गया है, ताकि यह किसी भी Android प्लैटफ़ॉर्म पर काम कर सके. हालांकि, इसे ओईएम के हिसाब से बनाई गई सुविधाओं को लागू करने के लिए नहीं बनाया गया है. उदाहरण के लिए, स्टीयरिंग व्हील कंट्रोल पर मौजूद कोई बटन, जिसे दबाने पर वह कार की मौजूदा जगह की जानकारी देने वाला Maps ऐप्लिकेशन (किसी इंटेंट के ज़रिए) खोलता है. इस सुविधा की मदद से, ड्राइवर अपनी मौजूदा जगह की जानकारी देख सकते हैं. इससे, ड्राइविंग के दौरान उनका ध्यान भटकने से बचता है.
इस लेख में, किसी मौजूदा Android KeyEvent
का फिर से इस्तेमाल करके, CustomInputEvent
बनाने का तरीका बताया गया है. ऐसा सिर्फ़ तब किया जाता है, जब सुविधा को दिखाने के लिए किसी Android KeyEvent
का इस्तेमाल नहीं किया जा सकता.
HW_CUSTOM_INPUT
OEM कस्टम इनपुट को HW_CUSTOM_INPUT और
CustomInputEvent.java से दिखाया जाता है. HW_CUSTOM_INPUT एक स्थानीय इवेंट है, जिसे कार के हार्डवेयर (वाहन एचएएल) से इंस्टैंशिएट किया जाता है. OEM तय करते हैं कि इस इवेंट को कैसे इंस्टैंशिएट किया जाए. VehiclePropertyAccess:READ
के साथ, HW_CUSTOM_INPUT का ऐक्सेस [रीड ओनली] के तौर पर सेट किया गया है.
यह पक्का करने के लिए कि वाहन का एचएएल हमेशा उपलब्ध सबसे नई वैल्यू ब्रॉडकास्ट कर सके, HW_CUSTOM_INPUT सूचना को VehiclePropertyChangeMode:ON_CHANGE
के साथ ON_CHANGE
के तौर पर सेट किया गया है.
HW_CUSTOM_INPUT मान, जेनरिक अरे से मिलकर बनता है.
int32
, इसे ग्लोबल के तौर पर सेट किया जाता है. तीन सामान्य पूर्णांक ये होते हैं:
पहला एलिमेंट, इनपुट कोड दिखाता है. इसे ओईएम तय करता है. इनपुट कोड से किसी भी सेमैंटिक को जोड़ा जा सकता है.
दूसरा एलिमेंट, टारगेट डिसप्ले को सेव करता है, जैसे कि मुख्य डिसप्ले या क्लस्टर.
तीसरे एलिमेंट में, इवेंट को दोहराए जाने की संख्या शामिल होती है. उदाहरण के लिए, यह बताने के लिए कि किसी बटन को कितनी बार दबाया गया.
CustomInputEvent और Car Input API
InputHalService, कार की वह सेवा है जिसे वाहन के एचएएल से इनकमिंग
HW_CUSTOM_INPUT
मिलता है.
InputHalService, इनकमिंग HW_CUSTOM_INPUT
को CustomInputEvent
में बदल देता है. यह एक Java parcelable क्लास है, जो car-lib/src/android/car/input में मौजूद है. साथ ही, इसमें संबंधित aidl इंटरफ़ेस भी शामिल है.
CarInputService, कार की इनपुट सेवा की मुख्य सेवा है. यह आने वाले CustomInputEvents को स्वीकार करती है और फिर उन्हें रजिस्टर की गई किसी भी Android सिस्टम सेवा पर भेजती है.
इनकमिंग कस्टम इनपुट इवेंट को रजिस्टर करने और पाने के लिए, सिस्टम सेवाओं को ये काम करने होंगे:
CarइनपुटManager.Car Input CaptureCallback#onKeyEvents लागू करें.
CarInputManager#requestInputEventCapture के ज़रिए रजिस्टर करें. इसके लिए, इनपुट टाइप पैरामीटर के तौर पर
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
को पास करें.रजिस्ट्रेशन हटाने के लिए, सेवाओं को CarInputManager#releaseInputEventCapture को शुरू करना होगा.
यहां दिए गए डायग्राम में, OEM कस्टम इनपुट इवेंट के वर्कफ़्लो के बारे में बताया गया है.
OEM Android सिस्टम सेवाएं
OEM, CarInputService
से आने वाले Custom InputEvent मैनेज करने के लिए, Android सिस्टम की अपनी सेवा उपलब्ध कराते हैं.
सिर्फ़ वे सेवाएं, Car Input API (CarInputManager) से CustomInputEvents को रजिस्टर और रिसीव कर सकती हैं जिन्हें android.permission.INJECT_EVENTS विशेष अनुमति के तौर पर मार्क किया गया हो. तीसरे पक्ष की किसी भी सेवा या ऐप्लिकेशन को, Android सिस्टम की इस अनुमति के साथ साइन नहीं किया जा सकता. सिर्फ़ OEM की सेवाओं को ऐसा करने की अनुमति है. इसलिए, तीसरे पक्ष की कोई भी सेवा या ऐप्लिकेशन, कार इनपुट एपीआई के लिए रजिस्टर नहीं कर सकता.
OEM Android सिस्टम सेवाएं, SystemApi
और सार्वजनिक तरीके ऐक्सेस कर सकती हैं.
रेफ़रंस के तौर पर लागू करना
packages/services/Car/tests/SampleCustomInputService में, रेफ़रंस के तौर पर लागू किए गए उदाहरण देखें. इसे उदाहरण और दिशा-निर्देश के तौर पर दिया गया है. उदाहरण के लिए, स्टीयरिंग व्हील कंट्रोल में नया बटन जोड़ना. इस नए बटन को दबाने पर, कार की मौजूदा जगह के साथ Maps ऐप्लिकेशन शुरू हो जाता है.
इस उदाहरण में, OEM ने इस नई सुविधा (कार की मौजूदा जगह की जानकारी के साथ Maps ऐप्लिकेशन खोलना) को दिखाने के लिए, INPUT_CODE_F1
(पहला CustomInputEvent
सुविधा फ़ंक्शन) चुना है.
स्टार्ट अप के दौरान, यह सेवा requestInputEventCapture
के ज़रिए CarInputManager
के लिए खुद को रजिस्टर करती है (रेफ़रंस लागू करने का रजिस्ट्रेशन कोड देखें.
इनकमिंग कस्टम इनपुट इवेंट मिलने पर, यह सेवा Maps ऐप्लिकेशन को शुरू करने के लिए इंटेंट भेजती है. यह कैसे किया जाता है, यह जानने के लिए CustomInputEventListener.java देखें.