OEM कस्टम इनपुट

नई और स्टैंडर्ड के मुताबिक न होने वाली 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, इसे ग्लोबल के तौर पर सेट किया जाता है. तीन सामान्य पूर्णांक ये होते हैं:

  1. पहला एलिमेंट, इनपुट कोड दिखाता है. इसे ओईएम तय करता है. इनपुट कोड से किसी भी सेमैंटिक को जोड़ा जा सकता है.

  2. दूसरा एलिमेंट, टारगेट डिसप्ले को सेव करता है, जैसे कि मुख्य डिसप्ले या क्लस्टर.

  3. तीसरे एलिमेंट में, इवेंट को दोहराए जाने की संख्या शामिल होती है. उदाहरण के लिए, यह बताने के लिए कि किसी बटन को कितनी बार दबाया गया.

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 सिस्टम सेवा पर भेजती है.

इनकमिंग कस्टम इनपुट इवेंट को रजिस्टर करने और पाने के लिए, सिस्टम सेवाओं को ये काम करने होंगे:

यहां दिए गए डायग्राम में, OEM कस्टम इनपुट इवेंट के वर्कफ़्लो के बारे में बताया गया है.

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 देखें.