OEM कस्टम इनपुट

नई और गैर-मानक 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 के साथ) के रूप में सेट किया जाता है, तीन सामान्य पूर्णांक हैं:

  1. पहला तत्व OEM द्वारा परिभाषित किए जाने वाले इनपुट कोड का प्रतिनिधित्व करता है। आप किसी भी सिमेंटिक को इनपुट कोड से जोड़ सकते हैं।

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

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

CustomInputEvent और कार इनपुट एपीआई

InputHalService वह कार सेवा है जो वाहन HAL से आने वाली HW_CUSTOM_INPUT प्राप्त करती है।

InputHalService आने वाले HW_CUSTOM_INPUT CustomInputEvent में परिवर्तित करता है, जो संबंधित सहायता इंटरफ़ेस के साथ कार-lib/src/android/car/input में स्थित एक जावा पार्सलेबल क्लास है।

CarInputService , एक मुख्य कार इनपुट सेवा, आने वाले CustomInputEvents को प्राप्त करती है और फिर उन्हें किसी भी पंजीकृत Android सिस्टम सेवा पर भेजती है।

आने वाले CustomInputEvents को पंजीकृत करने और प्राप्त करने के लिए, सिस्टम सेवाओं को यह करना होगा:

निम्नलिखित आरेख OEM कस्टम इनपुट इवेंट के वर्कफ़्लो को दिखाता है।

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