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