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