নতুন এবং অ-মানক Android বৈশিষ্ট্যগুলির জন্য নতুন গাড়ি ইনপুট ইভেন্ট যোগ করতে OEM কাস্টম ইনপুটগুলি ব্যবহার করুন৷ অ-মানক ইনপুট ইভেন্টগুলি বিদ্যমান Android KeyEvent
দ্বারা ম্যাপ করা হয় না, যা জেনেরিক এবং যেকোনো Android পৃষ্ঠে কাজ করার জন্য ডিজাইন করা হয়েছে কিন্তু OEM-নির্দিষ্ট বৈশিষ্ট্যগুলি বাস্তবায়নের জন্য প্রসারিত করা হয়নি৷ উদাহরণস্বরূপ, স্টিয়ারিং হুইল নিয়ন্ত্রণে অবস্থিত একটি বোতাম যা চাপলে, গাড়ির বর্তমান অবস্থান সহ একটি মানচিত্র অ্যাপ (একটি অভিপ্রায়ের মাধ্যমে) খোলে৷ এই বৈশিষ্ট্যটি চালকদের গাড়ি চালানোর সময় বিভ্রান্ত না হয়ে তাদের বর্তমান অবস্থান কল্পনা করতে সক্ষম করে।
এই নিবন্ধটি বর্ণনা করে যে কীভাবে একটি বিদ্যমান Android KeyEvent
পুনঃব্যবহার করতে একটি CustomInputEvent
তৈরি করতে হবে শুধুমাত্র তখনই যখন কোনো Android KeyEvent
বৈশিষ্ট্য উপস্থাপন করতে ব্যবহার করা যাবে না।
HW_CUSTOM_INPUT
একটি OEM কাস্টম ইনপুট HW_CUSTOM_INPUT এবং CustomInputEvent.java দ্বারা প্রতিনিধিত্ব করা হয়। HW_CUSTOM_INPUT হল নেটিভ ইভেন্ট, গাড়ির হার্ডওয়্যার (যানবাহন HAL) দ্বারা তাৎক্ষণিক৷ এই ইভেন্টটি কিভাবে ইনস্ট্যান্টিউট করা যায় তা OEM নির্ধারণ করে। VehiclePropertyAccess:READ
সহ HW_CUSTOM_INPUT- এ অ্যাক্সেস [শুধু পাঠযোগ্য] হিসাবে সেট করা হয়েছে।
যানবাহন HAL সর্বদা সর্বশেষ উপলব্ধ মান সম্প্রচার করতে পারে তা নিশ্চিত করতে, HW_CUSTOM_INPUT বিজ্ঞপ্তিটি VehiclePropertyChangeMode:ON_CHANGE
সহ ON_CHANGE
হিসাবে সেট করা হয়েছে।
HW_CUSTOM_INPUT মানগুলি জেনেরিক int32
এর একটি অ্যারে নিয়ে গঠিত, যা গ্লোবাল হিসাবে সেট করা হয়েছে তিনটি জেনেরিক পূর্ণসংখ্যা হল:
প্রথম উপাদানটি OEM দ্বারা সংজ্ঞায়িত করা ইনপুট কোড প্রতিনিধিত্ব করে। আপনি ইনপুট কোডের সাথে যেকোনো শব্দার্থিক যুক্ত করতে পারেন।
দ্বিতীয় উপাদান লক্ষ্য প্রদর্শন সংরক্ষণ করে, যেমন প্রধান প্রদর্শন বা ক্লাস্টার।
তৃতীয় উপাদানটিতে ইভেন্টটি কতবার পুনরাবৃত্তি হয়েছিল তা রয়েছে। উদাহরণস্বরূপ, একটি বোতাম কতবার চাপা হয়েছিল তা নির্দেশ করতে।
CustomInputEvent এবং গাড়ী ইনপুট API
InputHalService হল একটি গাড়ি পরিষেবা যা HAL থেকে HW_CUSTOM_INPUT
একটি ইনকামিং পায়৷
InputHalService আগত HW_CUSTOM_INPUT
CustomInputEvent
এ রূপান্তর করে, একটি জাভা পার্সেলেবল শ্রেণী যা car-lib/src/android/car/input- এ অবস্থিত, সংশ্লিষ্ট aidl ইন্টারফেস সহ।
CarInputService , একটি মূল কার ইনপুট পরিষেবা, ইনকামিং কাস্টমইনপুট ইভেন্টগুলি গ্রহণ করে এবং তারপর সেগুলিকে যেকোন নিবন্ধিত Android সিস্টেম পরিষেবাতে পাঠায়৷
ইনকামিং কাস্টমইনপুট ইভেন্টগুলি নিবন্ধন করতে এবং গ্রহণ করতে, সিস্টেম পরিষেবাগুলি অবশ্যই:
CarInputManager.CarInputCaptureCallback#onKeyEvents প্রয়োগ করুন।
CarInputManager#requestInputEventCapture এর মাধ্যমে নিবন্ধন করুন,
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
ইনপুট টাইপ প্যারামিটার হিসাবে পাস করে।নিবন্ধনমুক্ত করার জন্য, পরিষেবাগুলিকে অবশ্যই CarInputManager#releaseInputEventCapture-কে আহ্বান করতে হবে।
নিম্নলিখিত চিত্রটি একটি OEM কাস্টম ইনপুট ইভেন্টের কর্মপ্রবাহকে চিত্রিত করে৷
OEM অ্যান্ড্রয়েড সিস্টেম পরিষেবা
OEM গুলি CarInputService
থেকে ইনকামিং CustomInputEvents পরিচালনা করতে তাদের Android সিস্টেম পরিষেবা প্রদান করে৷
শুধুমাত্র android.permission.INJECT_EVENTS বিশেষাধিকার অনুমতি দ্বারা চিহ্নিত পরিষেবাগুলিই কার ইনপুট API ( CarInputManager ) থেকে কাস্টমইনপুট ইভেন্টগুলি নিবন্ধন করতে এবং গ্রহণ করতে পারে৷ এই অ্যান্ড্রয়েড সিস্টেমের অনুমতির সাথে কোন তৃতীয় পক্ষের পরিষেবা বা অ্যাপ্লিকেশন স্বাক্ষর করা যাবে না (শুধুমাত্র OEM পরিষেবাগুলি)। অতএব, কোনো তৃতীয় পক্ষের পরিষেবা বা অ্যাপ্লিকেশন কার ইনপুট API এর বিরুদ্ধে নিবন্ধন করতে পারবে না।
OEM Android সিস্টেম পরিষেবাগুলি SystemApi
এবং সর্বজনীন পদ্ধতিগুলি অ্যাক্সেস করতে পারে৷
রেফারেন্স বাস্তবায়ন
প্যাকেজ/পরিষেবা/কার/টেস্ট/SampleCustomInputService- এ রেফারেন্স বাস্তবায়ন দেখুন, যা একটি উদাহরণ এবং একটি নির্দেশিকা হিসাবে দেওয়া হয়েছে। উদাহরণস্বরূপ, স্টিয়ারিং হুইল নিয়ন্ত্রণে একটি নতুন বোতাম যুক্ত করতে। চাপলে, এই নতুন বোতামটি বর্তমান গাড়ির অবস্থানের সাথে মানচিত্র অ্যাপ শুরু করে।
এই উদাহরণে, OEM এই নতুন বৈশিষ্ট্যটি উপস্থাপন করতে INPUT_CODE_F1
(প্রথম CustomInputEvent
সুবিধার ফাংশন) নির্বাচন করেছে (বর্তমান গাড়ির অবস্থানের সাথে মানচিত্র অ্যাপটি খোলা)।
স্টার্ট আপের সময়, এই পরিষেবাটি requestInputEventCapture
মাধ্যমে CarInputManager
বিরুদ্ধে নিজেকে নিবন্ধন করে ( রেফারেন্স বাস্তবায়ন রেজিস্ট্রেশন কোড দেখুন।
ইনকামিং CustomInputEvents গ্রহণ করার সময়, এই পরিষেবাটি মানচিত্র অ্যাপ শুরু করার অভিপ্রায় পাঠায়। এটি কীভাবে সম্পন্ন হয় তা জানতে, CustomInputEventListener.java দেখুন।