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