OEM के कस्टम इनपुट

ओईएम के कस्टम इनपुट का इस्तेमाल करके, नई और नॉन-स्टैंडर्ड Android सुविधाओं के लिए नए कार इनपुट इवेंट जोड़ें. नॉन-स्टैंडर्ड इनपुट इवेंट को मौजूदा Android KeyEvent मैप नहीं करता. इसे सामान्य तौर पर डिज़ाइन किया गया है, ताकि यह किसी भी Android डिवाइस पर काम कर सके. हालांकि, इसे ओईएम के हिसाब से बनी सुविधाओं को लागू करने के लिए नहीं बनाया गया है. उदाहरण के लिए, स्टीयरिंग व्हील पर मौजूद कंट्रोल में मौजूद बटन. इसे दबाने पर, कार की मौजूदा जगह की जानकारी के साथ मैप ऐप्लिकेशन खुल जाता है. ऐसा इंटेंट के ज़रिए होता है. इस सुविधा की मदद से, ड्राइवर गाड़ी चलाते समय बिना ध्यान भटकाए अपनी मौजूदा जगह की जानकारी देख सकते हैं.

इस लेख में, किसी मौजूदा Android KeyEvent का फिर से इस्तेमाल करके, एक नया CustomInputEvent बनाने का तरीका बताया गया है. इस CustomInputEvent का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब सुविधा को दिखाने के लिए किसी Android KeyEvent का इस्तेमाल न किया जा सके.

HW_CUSTOM_INPUT

OEM के कस्टम इनपुट को HW_CUSTOM_INPUT और CustomInputEvent.java से दिखाया जाता है. HW_CUSTOM_INPUT एक नेटिव इवेंट है. इसे कार के हार्डवेयर (Vehicle HAL) से इंस्टैंशिएट किया जाता है. OEM यह तय करते हैं कि इस इवेंट को कैसे इंस्टैंशिएट करना है. HW_CUSTOM_INPUT को [read only] के तौर पर सेट किया गया है. साथ ही, VehiclePropertyAccess:READ को भी सेट किया गया है.

यह पक्का करने के लिए कि वाहन का एचएएल हमेशा उपलब्ध नई वैल्यू को ब्रॉडकास्ट कर सके, HW_CUSTOM_INPUT सूचना को ON_CHANGE के तौर पर सेट किया जाता है. साथ ही, VehiclePropertyChangeMode:ON_CHANGE के तौर पर सेट किया जाता है.

HW_CUSTOM_INPUT वैल्यू, सामान्य int32 की एक रेंज से बनी होती हैं, जिसे GLOBAL (VehicleArea:GLOBAL के साथ) के तौर पर सेट किया जाता है. तीन सामान्य पूर्णांक ये हैं:

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

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

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

CustomInputEvent और Car Input API

InputHalService, Car service है. यह Vehicle HAL से HW_CUSTOM_INPUT पाने का काम करती है.

InputHalService, आने वाले HW_CUSTOM_INPUT को CustomInputEvent में बदलता है. यह Java की parcelable क्लास है, जो car-lib/src/android/car/input में मौजूद है. साथ ही, यह aidl इंटरफ़ेस के साथ काम करती है.

CarInputService, कार की इनपुट सेवा से जुड़ी मुख्य सेवा है. यह आने वाले CustomInputEvents को स्वीकार करती है. इसके बाद, उन्हें रजिस्टर की गई किसी भी Android सिस्टम सेवा को भेजती है.

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

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

OEM के लिए कस्टम इनपुट वर्कफ़्लो

ओईएम की Android सिस्टम सेवाएं

ओईएम, CarInputService से आने वाले CustomInputEvents को मैनेज करने के लिए, Android सिस्टम सर्विस उपलब्ध कराते हैं.

सिर्फ़ वे सेवाएं, Car Input API (CarInputManager) से CustomInputEvents को रजिस्टर और पा सकती हैं जिन्हें android.permission.INJECT_EVENTS की अनुमति मिली है. तीसरे पक्ष की किसी सेवा या ऐप्लिकेशन में, Android सिस्टम की इस अनुमति के साथ साइन इन नहीं किया जा सकता. सिर्फ़ ओईएम की सेवाओं में साइन इन किया जा सकता है. इसलिए, तीसरे पक्ष की कोई भी सेवा या ऐप्लिकेशन, Car Input API के साथ रजिस्टर नहीं कर सकता.

OEM Android सिस्टम सेवाएं, SystemApi और सार्वजनिक तरीकों को ऐक्सेस कर सकती हैं.

रेफ़रंस के तौर पर लागू करना

packages/services/Car/tests/SampleCustomInputService में रेफ़रंस के तौर पर लागू किया गया कोड देखें. इसे उदाहरण और दिशा-निर्देश के तौर पर उपलब्ध कराया गया है. उदाहरण के लिए, स्टीयरिंग व्हील कंट्रोल में नया बटन जोड़ने के लिए. इस नए बटन को दबाने पर, Maps ऐप्लिकेशन खुल जाता है और कार की मौजूदा जगह दिखती है.

इस उदाहरण में, ओईएम ने इस नई सुविधा (कार की मौजूदा जगह की जानकारी के साथ Maps ऐप्लिकेशन खोलना) को दिखाने के लिए, INPUT_CODE_F1 (पहला CustomInputEvent सुविधा फ़ंक्शन) चुना है.

शुरू होने के दौरान, यह सेवा CarInputManager के साथ खुद को रजिस्टर करती है. इसके लिए, requestInputEventCapture का इस्तेमाल किया जाता है. रेफ़रंस के तौर पर लागू किए गए रजिस्ट्रेशन कोड देखें.

आने वाले CustomInputEvents को पाने पर, यह सेवा Maps ऐप्लिकेशन को शुरू करने का इंटेंट भेजती है. इसे कैसे पूरा किया जाता है, यह जानने के लिए CustomInputEventListener.java देखें.