এই বিভাগটি নিয়ন্ত্রণ কেন্দ্র রেফারেন্স অ্যাপের জন্য নির্দিষ্ট প্রযুক্তিগত বিবরণ প্রদান করে।
কন্ট্রোল সেন্টার একটি আনবান্ডেলড, প্রিভিলেজড, সিস্টেম সাইনড অ্যাপ যার জন্য ন্যূনতম 35 (Android V (API লেভেল 35)) SDK ভার্সন প্রয়োজন। System APIs ব্যবহার করার জন্য অ্যাপটি system/priv-app ইনস্টল করা আছে। মিডিয়া তথ্য পড়ার জন্য, অ্যাপটি প্ল্যাটফর্ম-সাইনড হতে হবে। আপনি ওভার-দ্য-এয়ার (OTA) অ্যাপটি আপডেট করতে পারেন।
পটভূমি পরিষেবা
কন্ট্রোল সেন্টার অ্যাপটি তার কার্যকারিতার জন্য একটি ব্যাকগ্রাউন্ড সার্ভিসের উপর নির্ভর করে। Vendor ServiceController ব্যবহারকারীর জীবনচক্রের user-post-unlocked অবস্থায় Control Center Service শুরু করে। কন্ট্রোল সেন্টার সর্বদা সক্রিয় থাকতে হবে এবং ব্যাকগ্রাউন্ডে যোগাযোগ করতে হবে - অ্যাপটি ব্যবহারকারীর দ্বারা খোলা অ্যাপের উপর নির্ভর করতে পারে না।
Control Center Service কমিউনিকেশন এপিআই ব্যবহার করে অন্যান্য দখলদার অঞ্চলের অন্যান্য দৃষ্টান্তের সাথে সংযোগ স্থাপন করে এবং যোগাযোগ করে। প্রতিটি ব্যবহারকারীর উপর কন্ট্রোল সেন্টার দৃষ্টান্ত কীভাবে সংযোগ স্থাপন করে এবং ডেটা প্রেরণ এবং গ্রহণ করে তা বোঝার জন্য ইন্টিগ্রেশন গাইডটি পড়া অপরিহার্য।

যোগাযোগ
একবার সংযুক্ত হয়ে গেলে, Control Center Service তথ্য বহনকারী protobuf অবজেক্টের সাথে যোগাযোগ করে। Communication APIs ব্যবহার করে protobuf অন্য অকুপ্যান্ট জোনে পাঠানোর জন্য, protobuf একটি byte array রূপান্তরিত করা হয়, একটি payload object তৈরি করা হয় এবং Payload CarOccupantConnectionManager#sendPayload এর মাধ্যমে পাঠানো হয়।
message ControlCenterPayload {
required Type messageType = 1;
// ...
enum Type {
MEDIA_STATUS = 0;
MEDIA_COMMAND = 1;
INPUT_LOCK_COMMAND = 2;
INPUT_LOCK_SUCCESSFUL = 3;
CANCEL_AUDIO_REQUEST = 4;
MIRRORING_REQUEST_RECEIVER_DECISION = 5;
MIRRORING_SESSION_ENDED = 6;
}
}
private fun parsePayload(
senderZone: OccupantZoneInfo,
payload: Payload
) {
val parsedPayload =
ControlCenterPayload.parseFrom(payload.bytes)
when (parsedPayload.messageType) {
ControlCenterPayload.Type.MEDIA_STATUS -> {
// logic here
}
}
//…
}
উপাত্ত
অকুপ্যান্ট জোন সম্পর্কে তথ্য নিয়ন্ত্রণ কেন্দ্রে OccupantZoneData অবজেক্ট আকারে সংরক্ষণ করা হয়। স্থানীয় OccupantZoneData তে পরিবর্তনগুলি Comms API মাধ্যমে অন্যান্য নিয়ন্ত্রণ কেন্দ্রের উদাহরণে পাঠানো হয়।
যখন প্রাপ্ত Payload পার্স করা হয়, তখন পার্স করা ডেটা স্থানীয় OccupantZoneStateRepository তে পাঠানো হয় যা পরিবর্তনের মতামত সূচিত করে। বেশিরভাগ ডেটা Kotlin flows on Android সহ ক্লাসগুলির মধ্যে পাস করা হয়।
কেবিন স্পিকারের অডিও অনুরোধগুলি পরিচালনা করুন
যাতে ড্রাইভার সর্বদা কেবিন স্পিকারের মাধ্যমে যাত্রীদের অডিও চালানোর অনুরোধ গ্রহণ করতে পারে, তৈরি করা হলে, ড্রাইভারের Control Center Service Primary ZoneMedia Audio RequestCallback নিবন্ধন করে ।
CarAudioManager#requestMediaAudioOnPrimaryZone এ কল করার সময় কলব্যাকের মাধ্যমে জানানো হয়। ড্রাইভারের Control Center Service একটি হেডস-আপ নোটিফিকেশন (HUN) তৈরি করে অনুরোধগুলি পরিচালনা করে যা CarAudioManager#allowMediaAudioOnPrimaryZone(boolean) এর মাধ্যমে গ্রহণ বা প্রত্যাখ্যান করা যেতে পারে।
অন্যান্য স্ক্রিনের সাথে একটি ভিডিও একসাথে দেখুন
CarActivityManager এ Task Mirroring APIs কারণে কো-ওয়াচিং কাজ করে। TaskMirroringManager প্রথমে CarActivityManager#getVisibleTasks এ চলমান MediaSession অ্যাপের প্যাকেজ অনুসন্ধান করে এবং তারপর একটি VirtualDisplay তৈরি করে এবং CarActivityManager#moveRootTaskToDisplay এর মাধ্যমে দৃশ্যমান টাস্কটিকে এই ডিসপ্লেতে স্থানান্তর করে।
এটি একটি IBinder টোকেন প্রদান করে যা MirroredSurfaceView একটি লেআউটে ব্যবহার করে MirroredSurfaceView#mirrorSurface এর মাধ্যমে টাস্কটি প্রদর্শন করতে পারে। Communication API Payload অবজেক্টটি টোকেনটি অন্যান্য দখলকারী অঞ্চলে প্রেরণ করে।
ঐসব দখলদার অঞ্চলের প্রতিটি নিয়ন্ত্রণ কেন্দ্রের উদাহরণ একটি Mirroring activity চালু করে এবং সেই টোকেনটি ব্যবহার করে MirroredSurfaceView পূরণ করে।

টাস্ক মিররিং API গুলি
কন্ট্রোল সেন্টার এই টাস্ক মিররিং API গুলি ব্যবহার করে:
CarActivityManager#getVisibleTasks(int displayId)<ActivityManager.RunningTaskInfo> প্রেরক প্রদর্শনের জন্য বলা হয়েছে।CarActivityManager#moveRootTaskToDisplay(int virtualDisplayId)CarActivityManager#createTaskMirroringToken(int taskId)IBinder টোকেনকে মিরর করার জন্য একটি টাস্ক তৈরি করে এবং টাস্কটি ভার্চুয়াল ডিসপ্লেতে স্থানান্তরিত হওয়ার পরে এটি কল করা উচিত।MirroredSurfaceView#mirrorSurface(IBinder token)কন্ট্রোল সেন্টারে টাস্ক মিররিংয়ের সীমাবদ্ধতা
কন্ট্রোল সেন্টার শুধুমাত্র MediaSession অ্যাপের জন্য টাস্ক মিররিং সমর্থন করে। তবে, API যেকোনো কাজ মিরর করতে পারে। ভার্চুয়াল ডিসপ্লেটি প্রেরকের ডিসপ্লের মাত্রা দিয়ে তৈরি। যদি রিসিভারের ডিসপ্লে বিভিন্ন রেজোলিউশন এবং মাত্রা ব্যবহার করে, তাহলে ভার্চুয়াল ডিসপ্লেটি স্ক্রিনের কেন্দ্রে প্রদর্শিত হবে।
পৃষ্ঠ দৃশ্যমান কাজ
কন্ট্রোল সেন্টার Theme.CarUi.NoToolbar চ্যাসিসকে একটি স্বচ্ছ উইন্ডোতে প্রসারিত করে। এর অর্থ হল যখন কোনও টাস্কের উপর কন্ট্রোল সেন্টার খোলা হয়, তখন টাস্কটি CarActivityManager#getVisibleTasks এ ফিরে আসে, যা টাস্কটিকে মিরর করার অনুমতি দেয়।
মিররিং তথ্য গ্রহণ করুন
কন্ট্রোল সেন্টার অন্যান্য অ্যাপগুলিকে মিররিং সেশনের বিষয়ে অবহিত করে। আপডেটগুলি গ্রহণ করার জন্য, অ্যাপগুলিকে Control Center Service সাথে আবদ্ধ হতে হবে এবং ক্লায়েন্ট হিসাবে একটি Handler ক্লাস পাঠাতে হবে, যা Control Center Service থেকে Messages গ্রহণ এবং পরিচালনা করে।
ক্লায়েন্ট অ্যাপগুলি মিররড অ্যাপের প্যাকেজ নাম গ্রহণ করতে পারে এবং কন্ট্রোল সেন্টারে এই কীগুলি ব্যবহার করে মিররড অ্যাপ হোস্ট করার কার্যকলাপের জন্য একটি intent URI চালু করতে পারে:
-
_config_msg_mirroring_pkg_name_key_ -
_config_msg_mirroring_redirect_uri_key_
এই কনফিগারেশনগুলি অবশ্যই ক্লায়েন্ট অ্যাপ রিসোর্স এবং কন্ট্রোল সেন্টার রিসোর্সে বিদ্যমান থাকতে হবে।

ডিবাগ নিয়ন্ত্রণ কেন্দ্র
Logger ক্লাস কন্ট্রোল সেন্টার লগ পরিচালনা করে, যা লগগুলিকে জোর করে কনফিগার করা যেতে পারে।
class Logger(cls: Class<*>) {
companion object {
private const val FORCE_LOGS = false
}
private val tag: String
init {
tag = cls.simpleName
}
fun v(message: String) {
if (Log.isLoggable(tag, Log.VERBOSE) || FORCE_LOGS) {
Log.v(tag, message)
}
}
...
সিস্টেম অ্যাপ এবং আপডেটযোগ্যতা
যেহেতু কন্ট্রোল সেন্টার একটি সিস্টেম অ্যাপ এবং প্ল্যাটফর্ম-স্বাক্ষরিত কারণ এটি শুধুমাত্র স্বাক্ষর-অনুমতি ব্যবহারের কারণে, কন্ট্রোল সেন্টারটি ডিভাইসে আগে থেকে ইনস্টল করা থাকতে হবে এবং কার মিডিয়া অ্যাপের মতোই শুধুমাত্র OTA আপডেট করা যেতে পারে।
উৎস থেকে নিয়ন্ত্রণ কেন্দ্র তৈরি করুন
কন্ট্রোল সেন্টার সোর্স কোড পেতে, আনবান্ডেলড অ্যাপ ইন্টিগ্রেট করুন দেখুন।
মাল্টি-ডিসপ্লে সহ ব্যবহারকারীর গোপনীয়তা
কন্ট্রোল সেন্টার সমস্ত গাড়ির যাত্রীদের সমস্ত ডিসপ্লেতে মিডিয়া তথ্য দেখতে দেয়। ব্যবহারকারীদের অবহিত করার জন্য গুগল আপনাকে একটি নন-ব্লকিং গোপনীয়তা বিজ্ঞপ্তি প্রবেশ করানোর পরামর্শ দেয়। গুগল আপনাকে সিস্টেম স্তরে এটি করার পরামর্শ দেয়, যখন আপনি কোনও ডিসপ্লেতে সাইন ইন করেন।