অ্যাপ ফাউন্ডেশন

গাড়ি হল আপনার ক্যানভাস: রাস্তার জন্য Android ডেভেলপমেন্ট আনলক করা

স্পিকার

সম্পর্কে

টক সম্পর্কে

Android Auto এবং Android Automotive OS-এর মাধ্যমে গাড়ির ডিসপ্লে আরও বড় হওয়ার সাথে সাথে ডেভেলপারদের দুটি চ্যালেঞ্জের মুখোমুখি হতে হয়: গাড়ি পার্ক করা থাকলে সমৃদ্ধ, মানানসই অভিজ্ঞতা প্রদান করা এবং গাড়ি চালানোর সময় ড্রাইভারের নিরাপত্তা নিশ্চিত করে টেমপ্লেট-ভিত্তিক অভিজ্ঞতা প্রদান করা। এই ৩০ মিনিটের বিস্তারিত টেকনিক্যাল সেশনে, আমরা এন্ড-টু-এন্ড আর্কিটেকচার এবং ডেভেলপমেন্টের পদ্ধতি এক্সপ্লোর করি যাতে Android অ্যাপকে গাড়ির সাথে মানানসই করা যায়।

গাড়িতে ব্যবহারের জন্য অ্যাপ ডিজাইন করার প্রাথমিক বিষয় থেকে শুরু করে মিডিয়া অভিজ্ঞতা তৈরি করার নতুন পদ্ধতি, যা গাড়ি ড্রাইভ থেকে পার্ক মোডে শিফট করার সাথে সাথে অডিও থেকে ভিডিওতে শিফট করে, আপনার অ্যাপ রাস্তায় নিয়ে আসার জন্য প্রয়োজনীয় সবকিছুই আপনি জানতে পারবেন।

সারাংশ

  • গাড়ির জন্য Android দুটি প্ল্যাটফর্মকে টার্গেট করে: Android Auto এবং Android Automotive OS। একটি ফোন থেকে প্রোজেক্ট করে, অন্যটি সরাসরি গাড়িতে চলে।
  • গাড়ির অ্যাপ লাইব্রেরি ড্রাইভিং-অপ্টিমাইজ করা ইন্টারফেসের জন্য টেমপ্লেট প্রদান করে যা বিভিন্ন গাড়ির হার্ডওয়্যার কনফিগারেশনের সাথে মানিয়ে নেয়।
  • পার্ক করা গাড়ির অ্যাপ, ভিডিও স্ট্রিমিং, গেম ও ওয়েব ব্রাউজারের মতো সমৃদ্ধ অভিজ্ঞতার জন্য স্ট্যান্ডার্ড Android অ্যাক্টিভিটির উপর নির্ভর করে।
  • Car App Library 1.9-এ নতুন UI কম্পোনেন্ট ও ব্র্যান্ড কাস্টমাইজেশন টোকেন আছে। এছাড়াও, এটি Android Automotive OS-এ মিডিয়া টেমপ্লেট সংক্রান্ত সহায়তা সম্পূর্ণভাবে প্রসারিত করে।
  • পার্ক-টু-ড্রাইভ ক্ষমতা পার্ক করার সময় নেটিভ ভিডিও অ্যাক্টিভিটি ডাইনামিকভাবে লঞ্চ করে, তারপর গাড়ি চালানোর সময় নিরবচ্ছিন্ন অডিও বজায় রাখতে মিডিয়া টেমপ্লেটে ফিরে যায়।

রিসোর্স

Gemini Notebook

বিষয়

  • android-for-cars
  • android-auto
  • android-automotive-os
  • car-app-library
  • media3
  • পার্ক করা অ্যাপ

ট্রান্সস্ক্রিপ্ট করা

গাড়ির জন্য Android-এর ভূমিকা

  • ঠিক আছে।

  • সবাইকে স্বাগত জানাই।

  • এই সেশনে আমাদের সাথে যোগ দেওয়ার জন্য ধন্যবাদ, গাড়িটি আপনার ক্যানভাস।

  • এই সেশনটি Android ডেভেলপমেন্টের মাধ্যমে রাস্তায় গাড়ি চালানোর অভিজ্ঞতা আরও উন্নত করার বিষয়ে।

  • আমি পল ল্যামার্টসমা।

  • আর আমি থমাস ওয়েদার্স।

  • আমরা Android for Cars টিমের ডেভেলপার রিলেশনস ইঞ্জিনিয়ার।

  • আমি নিশ্চিত যে আপনাদের মধ্যে অনেকেই অনেক সময় এবং শক্তি ব্যয় করেছেন যাতে আপনার অ্যাপগুলি বিভিন্ন স্ক্রিন এবং ডিভাইস, ফোন এবং ফোল্ডেবল এবং ট্যাবলেট এবং আপনার কাছে যা আছে সেগুলিতে সুন্দর দেখায় এবং সুন্দরভাবে কাজ করে।

  • আজ আমরা এমন একটি স্ক্রিনের উপর ফোকাস করতে চলেছি যার ব্যাপারে আপনি হয়ত ভাবেননি।

  • এবং এটি আপনাকে অনন্য উপায়ে ব্যবহারকারীদের কাছে পৌঁছাতে সাহায্য করতে পারে।

  • এটি হল গাড়ির ভিতরের ডিসপ্লে।

  • তাহলে, গাড়ির জন্য Android বলতে আমি কী বোঝাতে চাইছি তার একটি সংক্ষিপ্ত ওভারভিউ দিয়ে শুরু করা যাক।

  • গাড়ির জন্য Android কোনও একক জিনিস নয়।

  • আপনি দুটি প্ল্যাটফর্ম টার্গেট করতে পারবেন।

  • প্রথমত, Android Auto হল ফোন-চালিত, প্রোজেক্টেড সিস্টেম।

  • Android Auto-এর মাধ্যমে, অ্যাপটি আপনার ফোনে চলে এবং ওয়্যার্ড বা ওয়্যারলেস কানেকশন ব্যবহার করে গাড়ির ডিসপ্লেতে এর UI প্রজেক্ট করে।

  • দ্বিতীয়ত, Android Automotive OS হল Android-এর একটি ভ্যারিয়েন্ট যা সরাসরি গাড়িতে চলে।

  • Android Automotive OS ফোনের উপর নির্ভর না করে স্বাধীনভাবে কাজ করে, গাড়ির হার্ডওয়্যার, ক্লাইমেট কন্ট্রোল ও রেডিওর মতো ফিচারে সরাসরি অ্যাক্সেস পায় এবং সবচেয়ে গুরুত্বপূর্ণ হল, এটি নিজের ডেটা কানেকশন নিজেই ম্যানেজ করে।

  • Android Automotive OS-এ চলে এমন গাড়ির সাবসেট হল বিল্ট-ইন Google-এর সাথে গাড়ি।

  • বিল্ট-ইন Google-এর সাথে গাড়িতে Google অ্যাপ ও পরিষেবাও থাকে, যেমন Play Store, Gemini ও Google Maps।

  • দুটি প্ল্যাটফর্ম থাকলেও, আমাদের লক্ষ্য হল আপনার জন্য একবার তৈরি করা এবং দুটি প্ল্যাটফর্মেই দুর্দান্ত অভিজ্ঞতা প্রদান করে এমন অ্যাপ ডিপ্লয় করতে পারা সহজ করা।

  • এখন এখানে কার অ্যাপ লাইব্রেরি ব্যবহার করে একবার তৈরি করা কিছু মিডিয়া অ্যাপের উদাহরণ এবং Android Auto এবং Android Automotive OS উভয় ক্ষেত্রেই বিভিন্ন ডিসপ্লে সাইজ এবং শেপে এটি কেমন দেখাবে তা দেখানো হল।

  • আপনি বিভিন্ন ধরনের ডিভাইস ও সারফেসের জন্য অ্যাপ তৈরি করতে পারেন।

  • তাহলে, এই প্রশ্নটি আসে, গাড়ির জন্য কেন?

  • প্রথমত, এখানে স্কেলটি বেশ বিশাল।

  • বর্তমানে ২৫০ মিলিয়নের বেশি Android Auto-মানানসই গাড়ি রাস্তায় চলছে এবং ১৬টি বিভিন্ন ব্র্যান্ডের ১০০টির বেশি মডেলের গাড়িতে বিল্ট-ইন Google আছে।

  • আপনার অ্যাপ গাড়িতে থাকলে, আপনি ব্যবহারকারীদের দৈনন্দিন যাতায়াত, পারিবারিক অ্যাক্টিভিটি, টুকিটাকি কাজ এবং এমনকি রোড ট্রিপের সময়ও তাদের কাছে পৌঁছাতে পারবেন।

  • মার্কিন যুক্তরাষ্ট্রে, AAA-এর ২০২৪ আমেরিকান ড্রাইভিং সমীক্ষা অনুসারে, ড্রাইভাররা প্রতিদিন গড়ে ৬০ মিনিট গাড়ি চালান।

  • তবে, ব্যবহারকারীরা যখন সক্রিয়ভাবে গাড়ি চালাচ্ছেন, শুধু তখনই আপনি তাদের কাছে পৌঁছাচ্ছেন না।

  • এছাড়াও, আপনি পার্ক করা অবস্থায় তাদের কাছে পৌঁছাচ্ছেন।

  • হতে পারে তারা EV চার্জিং স্টেশনে গাড়ি চার্জ করছেন অথবা স্কুলের পিক-আপ লাইনে অপেক্ষা করছেন।

  • যাত্রীদের জন্য নির্দিষ্ট ডিসপ্লের ব্যবহার বৃদ্ধি পাওয়ার সাথে সাথে, আমরা আশা করি যে ভবিষ্যতে ব্যবহারকারীদের সাথে এনগেজমেন্ট বাড়ানোর আরও সুযোগ পাওয়া যাবে।

  • ঠিক আছে।

  • এখন, গাড়ির জন্য আপনি যে বিভিন্ন ধরনের অভিজ্ঞতা তৈরি করতে পারেন তা দেখে নেওয়া যাক।

  • গাড়ির জন্য কীভাবে তৈরি করতে হয় তা বুঝতে, গাড়ির মধ্যে অ্যাপ চালানোর সময় যে দুটি প্রধান পরিস্থিতি ও অবস্থা থাকে তা বোঝা সহায়ক।

  • প্রথমত, কিছু অ্যাপ আছে যেগুলি আপনি গাড়ি চালানোর সময় ব্যবহার করেন।

  • এগুলি হল ড্রাইভিং-অপ্টিমাইজ করা অভিজ্ঞতা যা গাড়ি চলাকালীন ব্যবহার করা যেতে পারে।

  • এর মধ্যে স্ক্রিনে তালিকাভুক্ত বিভাগগুলির অ্যাপ অন্তর্ভুক্ত, যেমন অডিও অ্যাপ, যেগুলিকে আমরা সাধারণত মিডিয়া, মেসেজিং এবং কমিউনিকেশন অ্যাপ, নেভিগেশন ইত্যাদি হিসেবে উল্লেখ করি।

  • ড্রাইভিং-অপ্টিমাইজড অভিজ্ঞতাকে অবশ্যই কঠোর বিভ্রান্তি সুরক্ষা মানদণ্ড মেনে চলতে হবে।

  • গাড়ি চলাকালীন যাতে নিরাপদে ব্যবহার করা যায় সেই জন্য অ্যাপের UI কীভাবে তৈরি করতে হবে সেই ব্যাপারে বিশেষ কিছু বিষয় বিবেচনা করতে হবে।

  • এখন ড্রাইভিং-অপ্টিমাইজড অ্যাপ তৈরি করার কয়েকটি আলাদা উপায় আছে।

এক নজরে Car App Library

  • তবে এই আলোচনায়, আমরা বিশেষ করে Car App Library ব্যবহারের উপর ফোকাস করব।

  • এটি হল Jetpack লাইব্রেরির একটি সেট যা টেমপ্লেট করা ফ্রেমওয়ার্ক প্রদান করে যা ড্রাইভিং-অপ্টিমাইজ করা ইউজার ইন্টারফেস প্রদান করে, পাশাপাশি গাড়িতে উপস্থিত বিভিন্ন হার্ডওয়্যার কনফিগারেশনের সাথে মানিয়ে নেওয়ার যত্ন নেয়।

  • তাই ইনপুট মোডালিটি, স্ক্রিনের সাইজ ও অ্যাস্পেক্ট রেশিওর মতো বিষয়গুলি নিয়ে ভাবুন।

  • গাড়ির জন্য ড্রাইভিং-অপ্টিমাইজড অভিজ্ঞতা তৈরি করার এটিই একমাত্র উপায় না হলেও, এই আলোচনায় আমি যে পদ্ধতির উপর ফোকাস করতে চাই তা হল গাড়ির জন্য Android অ্যাপ লাইব্রেরি ব্যবহার করে তৈরি করা।

  • আমরা প্রায়শই এটিকে সংক্ষেপে CAL বলি।

  • আমি একটু আগেই বলেছি, Car App Library হল লাইব্রেরির একটি সেট যা গাড়িতে ব্যবহারের জন্য আপনার অ্যাপ তৈরি করতে সাহায্য করে।

  • এটি একটি টেমপ্লেট করা ফ্রেমওয়ার্ক যা বিভিন্ন হার্ডওয়্যার কনফিগারেশনের সাথে মানিয়ে নেওয়ার কাজ পরিচালনা করার সময় ড্রাইভিং-অপ্টিমাইজ করা ইউজার ইন্টারফেস প্রদান করে।

  • আপনি অ্যাপ তৈরি করতে পারেন এবং Android Auto বা Android Automotive OS-এর মতো বিভিন্ন কনফিগারেশনে এটি ভাল পারফর্ম করবে বলে নিশ্চিত হতে পারেন।

  • CAL ব্যবহার করে তৈরি করা অ্যাপ এই হোস্ট ক্লায়েন্ট আর্কিটেকচারের উপর নির্ভর করতে পারে।

  • হোস্ট অ্যাপ, যা Android Auto নিজেই বা বিল্ট-ইন Google-এর সাথে গাড়ির ক্ষেত্রে Google Automotive App Host, হল সিস্টেম রেন্ডারার।

  • ব্যবহারকারীর ডিসপ্লেতে কী দেখানো হবে তা শেষ পর্যন্ত এটিই কন্ট্রোল করে।

  • তাই, অ্যাপ ডেভেলপার হিসেবে, আপনি শেষ পর্যন্ত পিক্সেল আঁকছেন না।

  • পরিবর্তে, আপনি কার অ্যাপ লাইব্রেরি টেমপ্লেটে স্ট্রাকচার্ড ডেটা এবং আপনার ডেটার স্ট্যাটাস ফিড করছেন।

  • এই হোস্ট তখন এই ডেটা নেয় এবং এটি নিরাপদে, নিরাপত্তা-সম্মত উপায়ে, একটি ডিসট্রাকশন-অপ্টিমাইজড লেআউটের সাথে আঁকে।

  • তাহলে, CAL-এর মধ্যে ক্লাসগুলি দেখে নেওয়া যাক, আপনার অ্যাপ তৈরি করার জন্য আপনাকে কী কী এক্সটেন্ড করতে হবে, CarAppService থেকে শুরু করা যাক।

  • এটি Android পরিষেবার একটি সাবক্লাস যা হোস্ট অ্যাপ্লিকেশনের জন্য ক্লায়েন্ট অ্যাপের সাথে যোগাযোগ করার জন্য একটি এন্ট্রি পয়েন্ট হিসেবে কাজ করে এবং এর উদ্দেশ্য হল সেশন ইনস্ট্যান্স তৈরি করা যার সাথে হোস্ট ইন্টার‍্যাক্ট করে।

  • গাড়ির ডিসপ্লেতে চলা ক্লায়েন্ট অ্যাপের ইনস্ট্যান্স হিসেবে আপনি সেশনকে বিবেচনা করতে পারেন।

  • অন্যান্য Android কম্পোনেন্টের মতো, এটির নিজস্ব লাইফ সাইকেল আছে যা সেশনের ইনস্ট্যান্সের অস্তিত্ব জুড়ে ব্যবহৃত রিসোর্স শুরু এবং শেষ করতে ব্যবহার করা যেতে পারে।

  • এটি CarAppService এবং সেশনের মধ্যে একটির-সাথে-অনেক সম্পর্ক।

  • যেমন, CarAppService-এর দুটি সেশন ইনস্ট্যান্স থাকতে পারে, একটি প্রাথমিক ডিসপ্লের জন্য এবং অন্যটি নেভিগেশন অ্যাপের ক্লাস্টার ডিসপ্লের জন্য যা ক্লাস্টার স্ক্রিনকে সাপোর্ট করে।

  • এখানে তার একটি উদাহরণ দেওয়া হল, যেখানে একটি গাড়িতে প্রাইমারি ডিসপ্লে ও ক্লাস্টার ডিসপ্লে আছে, প্রতিটি ডিসপ্লে একটি নির্দিষ্ট সেশনের সাথে যুক্ত এবং একজন অ্যাপ ডেভেলপার হিসেবে আপনিও এইভাবে মাল্টি-ডিসপ্লে গাড়ির জন্য সহায়তা প্রদান করতে পারেন।

  • তারপর, সেশনের মধ্যে, হোস্ট অ্যাপের মাধ্যমে রেন্ডার করা ইউজার ইন্টারফেস তৈরি করার জন্য স্ক্রিন ইনস্ট্যান্স দায়ী থাকে।

  • এই ইউজার ইন্টারফেসগুলি টেমপ্লেট ক্লাস দ্বারা উপস্থাপিত হয় যার প্রতিটি নির্দিষ্ট ধরনের লেআউট মডেল করে এবং এটি হতে পারে, উদাহরণস্বরূপ, একটি গ্রিড বা একটি তালিকা।

  • তাই, প্রতিটি সেশন স্ক্রিন ইনস্ট্যান্সের একটি স্ট্যাক ম্যানেজ করে যা আপনার অ্যাপ্লিকেশনের বিভিন্ন অংশ জুড়ে ব্যবহারকারীর ফ্লো ম্যানেজ করে এবং সেশনের মতো, একটি স্ক্রিনের নিজস্ব লাইফ সাইকেল থাকে যা আপনি হুক করতে পারেন।

  • তবে, হোস্ট আপনার UI রেন্ডার করছে এবং আপনি Car App Library টেমপ্লেট ব্যবহার করছেন বলে এই নয় যে আপনি খুব বেশি সীমাবদ্ধ বা আপনার অ্যাপ্লিকেশন কাস্টমাইজ করতে পারবেন না।

  • আপনি ব্যবহার করতে পারেন এমন অনেক টেমপ্লেট এবং কম্পোনেন্ট রয়েছে এবং আপনি নিজের পছন্দমতো অভিজ্ঞতা পেতে এগুলি মিক্স ও ম্যাচ করতে পারেন।

  • সাধারণ উদ্দেশ্যে ব্যবহার করা যায় এমন টেমপ্লেট আছে, যা Car App Library-র মধ্যে সব ধরনের অ্যাপ ব্যবহার করতে পারে এবং বিশেষ উদ্দেশ্যে ব্যবহার করা যায় এমন টেমপ্লেট আছে, যা নির্দিষ্ট অ্যাপ অভিজ্ঞতার জন্য তৈরি করা হয়েছে, যেমন নেভিগেশন বা আগ্রহের জায়গা।

  • তবে, ড্রাইভ-অপ্টিমাইজ করা অভিজ্ঞতা তৈরি করার বিশদ বিবরণে যাওয়ার আগে, আমি অন্য পরিস্থিতিটি কভার করতে চাই যেখানে আপনি গাড়িতে অ্যাপ্লিকেশন চালাতে পারেন: যখন গাড়ি পার্ক করা হয়।

পার্ক করা গাড়ির জন্য অ্যাপ ডেভেলপ করা

  • কিছু নির্দিষ্ট বিভাগের অ্যাপ্লিকেশন আছে যেগুলি শুধুমাত্র গাড়ি পার্ক করা অবস্থায় ব্যবহার করা যেতে পারে এবং এর মধ্যে ভিডিও অ্যাপ, গেম এবং ব্রাউজারের মতো জিনিস অন্তর্ভুক্ত রয়েছে।

  • কিন্তু গাড়িটি যখন-- গাড়িটি যখন গতিশীল থাকে না, তখন ড্রাইভিং ডিস্ট্র্যাকশন নির্দেশিকা তুলে নেওয়া হয় এবং আপনি আপনার বিদ্যমান অ্যাডাপ্টিভ UI-এর সাথে আরও বেশি সামঞ্জস্যপূর্ণ অভিজ্ঞতা প্রদান করতে পারেন।

  • পার্ক করা অ্যাপ অ্যাক্টিভিটি-ভিত্তিক এবং ফোন বা ট্যাবলেটের মতো অন্যান্য ডিভাইসে ব্যবহৃত অ্যাক্টিভিটির মতো বা একই রকম এবং আমরা পরবর্তী বিভাগে পার্ক করা অ্যাপ সম্পর্কে বিস্তারিত আলোচনা করব।

  • পার্ক করা অ্যাপ অভিজ্ঞতা আগে থেকে থাকা অ্যাডাপ্টিভ অ্যাক্টিভিটি আবার ব্যবহার করলেও, আপনাকে এখনও গাড়ি-- গাড়ি-নির্দিষ্ট কোয়ালিটি সংক্রান্ত নির্দেশিকা মেনে চলতে হবে, যার মধ্যে ম্যানিফেস্ট ঘোষণা এবং ডিসপ্লে কাটআউট থেকে শুরু করে গাড়ি চলতে শুরু করলে প্লেব্যাক পজ করা পর্যন্ত সবকিছু অন্তর্ভুক্ত।

  • সেই কাজ অটোমেট করতে সাহায্য করার জন্য, আমরা পার্কড অ্যাপের জন্য নতুন Android স্কিল লঞ্চ করেছি।

  • তাই, শুরু করার আগে, Android CLI ইনস্টল করেছেন কিনা তা নিশ্চিত করুন এবং আপনি এই ছোট লিঙ্ক থেকে এটি খুঁজে পেতে পারেন।

  • এবং তারপর আমাদের কাছে আছে-- একবার আপনি এটি সেট-আপ করলে, উপলভ্য স্কিল এক্সপ্লোর করতে android skills list রান করুন।

    android skills list
    android skills add android-for-cars-parked-apps
  • সেখানে অনেক ধরনের দক্ষতা রয়েছে, যার মধ্যে অনেকগুলি আপনি Android ডেভেলপমেন্টকে পরবর্তী স্তরে নিয়ে যাওয়ার জন্য ব্যবহার করতে পারেন।

  • এবং তারপরে বিশেষভাবে গাড়ির জন্য Android-এর জন্য, আপনি আপনার এজেন্টের প্রসঙ্গে দক্ষতা যোগ করতে android skills add android-for-cars-parked-apps ব্যবহার করতে পারেন।

  • এখন, আপনার পছন্দের AI এজেন্ট যাই হোক না কেন, এটি আপনাকে Android Auto বা Android Automotive OS-এর জন্য আপনার ম্যানিফেস্ট কনফিগার করতে, গাড়ির উইন্ডো ইনসেট এবং ব্যাক নেভিগেশনের মতো জিনিসগুলি ম্যানেজ করতে, ড্রাইভারের মনোযোগ বিভ্রান্তি প্লেব্যাক বিধিনিষেধ এনফোর্স করতে ধাপে ধাপে নির্দেশিকা প্রদান করে এবং আপনি Google Play-তে জমা দেওয়ার আগে এটি আপনার ভিডিও, গেম বা ব্রাউজার অ্যাপ অডিট করতে পারে।

গাড়ির অ্যাপের বিভাগের ওভারভিউ

  • তাই, অ্যাপ তৈরি করা-- গাড়ির জন্য অ্যাপ তৈরি করাও কিছুটা অনন্য কারণ এই অ্যাপের বিভাগগুলির ধারণা।

  • আমি আগেই বলেছি, কিছু নির্দিষ্ট বিভাগের অ্যাপ ড্রাইভ করার সময় ব্যবহার করা যায় এবং অন্যান্য বিভাগের অ্যাপ পার্ক করার সময় ব্যবহার করা যায়।

  • হাইলাইট করা এইসব বিভাগ ড্রাইভ করার সময় ব্যবহার করা যাবে।

  • এগুলির মধ্যে কিছু CAL হিসেবে চিহ্নিত করা হয়, যেমন আমি উল্লেখ করেছি, এটি হল কার অ্যাপ লাইব্রেরি এবং এই বিভাগের অ্যাপগুলি আমরা একটু আগে যেগুলি দেখেছি সেগুলির মতো টেমপ্লেট ব্যবহার করে।

  • এখন আমি দ্রুত এগুলি দেখে নিই, আমি খুব বেশি বিশদে যাব না।

  • মিডিয়া অ্যাপ দিয়ে শুরু করা যাক, এগুলি হল এমন অ্যাপ যা অডিও চালায়, ভিডিও নয়।

  • এগুলি তৈরি করার দুটি উপায় আছে।

  • এখানে সবচেয়ে উপরে MediaBrowserService দিয়ে চিহ্নিত করা বিকল্পটি হল সবচেয়ে সহজ বিকল্প।

  • আপনি যা করছেন তা হল আপনি মেটাডেটা প্রদান করছেন যেখানে ইনফোটেইনমেন্ট স্ক্রিন ইন্টারফেস সম্পূর্ণরূপে গাড়ি-অপ্টিমাইজড উপায়ে প্লেব্যাক এবং মিডিয়া ব্রাউজার UI রেন্ডার করার যত্ন নেয়।

  • অন্য বিকল্পটি হল, Car App Library ব্যবহার করে মিডিয়া অ্যাপ তৈরি করা এবং এটি আপনাকে আরও বেশি কন্ট্রোল ও বিকল্প দেয় যার মাধ্যমে আপনি নিজের মিডিয়া অ্যাপের স্টাইল ও প্রেজেন্টেশন কাস্টমাইজ করতে পারবেন এবং থমাস কিছুক্ষণের মধ্যেই আমাদের এই বিষয়ে আরও জানাবেন।

  • নেভিগেশন অ্যাপ অবশ্যই একটি গুরুত্বপূর্ণ ব্যবহারের ক্ষেত্র, যা রুট এবং এক এক করে দিকনির্দেশ প্রদান করে।

  • রাইডশেয়ার ড্রাইভার অ্যাপও এই বিভাগের মধ্যে পড়ে।

  • পয়েন্ট-অফ-ইন্টারেস্ট অ্যাপ আপনাকে EV চার্জার বা পার্কিং স্পটের মতো কাছাকাছি দরকারী লোকেশন অ্যাক্সেস করতে সাহায্য করে।

  • ইন্টারনেট অফ থিংস বা IoT অ্যাপ আপনাকে চলতে চলতে স্মার্ট ডিভাইস অ্যাক্সেস করতে দেয়, যেমন, হোম ম্যানেজমেন্ট।

  • এছাড়াও, আবহাওয়ার অ্যাপ উপলভ্য এবং এটি রিয়েল-টাইম রাডার, ঝড়ের সতর্কতা এবং লোকেশন-নির্দিষ্ট পূর্বাভাস দেওয়ার মতো কাজ করতে পারে।

  • এবং সবশেষে, যোগাযোগকে তিনটি উপবিভাগে ভাগ করা হয়েছে: গাড়িতে প্রাথমিক বিজ্ঞপ্তি পাঠানো, বা মেসেজিং এবং ভিডিও কলিং অ্যাপ্লিকেশন।

  • এছাড়াও, পার্ক করা ক্যাটেগরি আছে: ভিডিও স্ট্রিমিং অ্যাপ, গেম ও ওয়েব ব্রাউজার।

  • আমি আনন্দের সাথে জানাচ্ছি যে, মাত্র কয়েক সপ্তাহ আগে থেকে Android Auto ও Android Automotive OS-এ গেম প্রকাশ করার সুবিধা সব ডেভেলপারের জন্য উপলভ্য করা হয়েছে।

  • আপনি লক্ষ্য করবেন যে এইসব বিভাগের মধ্যে কিছুতে 'খোলা আছে', কিছুতে 'বিটা ভার্সনে আছে' এবং কিছুতে 'শীঘ্রই আসছে' লেখা আছে।

  • 'খোলা' মানে হল, যেকোনও ডেভেলপার এই বিভাগে সরাসরি প্রোডাকশনে অ্যাপ জমা দিতে পারবেন।

  • বিটা মানে হল, আপনি ইন্টার্নাল বা ক্লোজড ট্র্যাকে প্রকাশ করতে পারলেও, আগেভাগে অ্যাক্সেস প্রোগ্রামের অংশ হিসেবে আপনাকে গ্রহণ না করা পর্যন্ত অ্যাপটি প্রোডাকশনে প্রকাশ করা যাবে না।

  • এইসব বিভাগের প্রতিটির ডকুমেন্টেশনে আরও তথ্য এবং আমাদের আগ্রহসূচক ফর্মের লিঙ্ক অন্তর্ভুক্ত রয়েছে।

  • এবং তারপরে 'শীঘ্রই আসছে' হল সেইসব বিভাগের জন্য যেগুলি বর্তমানে কাজ করে না, তবে ভবিষ্যতে সেগুলি কাজ করার জন্য আমাদের পরিকল্পনা রয়েছে।

  • পরিশেষে, আমাদের উদ্দেশ্য হল প্ল্যাটফর্মকে একত্রিত করা।

  • আমরা চাই আপনি যাতে একবার কোড লিখে Android Auto এবং Android Automotive OS, দুই প্ল্যাটফর্মেই অ্যাপ তৈরি ও ডিস্ট্রিবিউট করতে পারেন, তা সে যেকোনও ক্যাটেগরির অ্যাপই হোক না কেন।

  • এবার থমাস মিডিয়া সম্পর্কে বলবেন।

কার অ্যাপ লাইব্রেরি মিডিয়া আপডেট

  • চিয়ার্স।

  • দারুণ।

  • তাই, গত বছর আমরা ভার্সন ১.৮-এ মিডিয়া অ্যাপের জন্য কার অ্যাপ লাইব্রেরি চালু করেছি, যা Android Auto-তে টেমপ্লেট করা ব্রাউজিং UI এবং কাস্টম অ্যাকশন নিয়ে এসেছে।

  • এর মধ্যে মিডিয়া প্লেব্যাক টেমপ্লেট অন্তর্ভুক্ত আছে যা এখানে বাঁদিকে দেখা যাচ্ছে।

  • এই বছর I/O-তে, আমরা Car App Library 1.9-এর মাধ্যমে আরও ব্রাউজ করার উপযোগী UI নিয়ে এসেছি।

  • তাই, CAL 1.9 বিটা ভার্সনে পৌঁছানোর সাথে সাথে, আপনি এখন Auto এবং Automotive OS জুড়ে মূল ফিচার আপডেট আনলক করতে পারবেন।

  • হাইলাইটের মধ্যে রয়েছে অ্যাপ এক্সপ্রেশনের মাধ্যমে ব্র্যান্ড কাস্টমাইজেশন, যা আপনাকে নিরাপত্তা সংক্রান্ত নিয়ম বজায় রেখে হোস্ট-রেন্ডার করা লেআউটের সাথে রঙ ও আকৃতির টোকেন কাস্টমাইজ করার সুবিধা দেয়। এর পাশাপাশি, স্পটলাইট বিভাগ, কনডেন্সড তালিকা আইটেম, স্ক্রল করা যায় এমন চিপ এবং একটি পারসিস্টেন্ট মিনি-প্লেয়ারের মতো নতুন UI কম্পোনেন্টও রয়েছে।

  • এছাড়াও, CAL 1.9 AAOS-এ মিডিয়া টেমপ্লেট সংক্রান্ত সহায়তা সম্পূর্ণভাবে প্রসারিত করে, যা দুটি ইকোসিস্টেম জুড়ে সত্যিকারের প্ল্যাটফর্ম ইউনিফিকেশনকে চালিত করে।

  • Car App Library-এর পরবর্তী ভার্সন শীঘ্রই আসছে: CAL ভার্সন ১০।

  • CAL ভার্সন ১০-এ কমিউনিকেশন অ্যাপের জন্য আরও কাস্টমাইজ করা টেমপ্লেট থাকবে, যা গাড়ি চালানোর সময় আরও শক্তিশালী এবং কাস্টম কলিং অভিজ্ঞতা প্রদান করবে।

  • এছাড়াও, আমরা অ্যাপের নতুন বিভাগ ও অ্যাপের জন্য টেমপ্লেট অন্তর্ভুক্ত করেছি, যাতে গাড়ি চালানোর সময় কথোপকথনের অভিজ্ঞতা ফিচার করা হয়েছে।

  • সবশেষে, Car App Library টেমপ্লেটের মাধ্যমে পার্ক-টু-ড্রাইভ ট্রানজিশন আরও মসৃণ করার জন্য আরও বেশি কার্যকারিতা যোগ করা হচ্ছে।

  • শীঘ্রই আরও অনেক সুবিধা আসতে চলেছে!

পার্ক-টু-ড্রাইভ ক্ষমতা

  • গাড়ি অ্যাপ লাইব্রেরি ব্যবহার করে পার্ক-টু-ড্রাইভ ক্ষমতা আপনার অ্যাপকে ডাইনামিকভাবে মোড ট্রানজিশন করতে এবং স্থির থাকাকালীন অ্যাডাপ্টিভ কন্টেন্ট দেখাতে এবং গাড়ি চালানোর সময় নির্বিঘ্নে গাড়ি অ্যাপ লাইব্রেরি টেমপ্লেটে ফিরে যেতে দেয়।

  • মূল অ্যাপ্লিকেশনের মধ্যে রয়েছে, আপনি স্থির অবস্থায় থাকলে কাস্টমাইজ করা যাচাইকরণ ফ্লো অফার করা অথবা আপনি পার্কিং অবস্থায় থাকলে ডেডিকেটেড পার্কিং অভিজ্ঞতা চালু করা, যেমন ভিডিও পডকাস্ট বা মিউজিক ক্লিপ স্ট্রিম করা।

  • এটি সরাসরি মিডিয়া প্লেব্যাক টেমপ্লেটের সাথে ইন্টিগ্রেট করে।

  • তাই, স্থির অবস্থায় থাকা গাড়ি ড্রাইভারদের আপনার অ্যাপের নেটিভ Android অ্যাক্টিভিটিতে সম্পূর্ণ অ্যাক্সেস দেয়, যার ফলে ভিডিও স্ট্রিমিংয়ের মতো রিচ মিডিয়া চালু করা যায়।

  • গাড়ি গিয়ারে দেওয়ার সাথে সাথেই বিভ্রান্তি থেকে রক্ষা করার ফিচার চালু হয়ে যায়, তাই এই প্রম্পট আপনার অ্যাপকে গাড়ির অ্যাপ লাইব্রেরি মিডিয়া টেমপ্লেটে ফিরিয়ে নিয়ে যায় যাতে আপনি কোনও বাধা ছাড়াই অডিও শুনতে পারেন।

  • গাড়িতে বসে উপভোগ করার মতো অভিজ্ঞতা দেওয়ার ক্ষেত্রে আমরা এক যুগান্তকারী মুহূর্তে এসে পৌঁছেছি।

  • মিডিয়া অ্যাপগুলি প্রথাগত ব্রাউজ ও প্লে ইন্টারফেসের বাইরে গিয়ে ড্রাইভার ও যাত্রী উভয়ের জন্য আরও সমৃদ্ধ, আরও ইমারসিভ ও ইন্ট্যার‍্যাক্টিভ অভিজ্ঞতা প্রদান করতে চায়।

  • গাড়ি পার্ক করার সময়, Media3 লাইব্রেরি ব্যবহার করে কীভাবে নেটিভ ভিডিও অ্যাক্টিভিটি যোগ করতে হয়, তার একটি উদাহরণ আমরা এখন দেখব।

  • তাই এটি শুরু করতে, আপনি সরাসরি ব্যাকগ্রাউন্ড প্লেব্যাক ইনস্ট্যান্সে ভিডিও রেন্ডারিং সারফেস কানেক্ট করতে চলেছেন।

    override fun onStart() {
           super.onStart()
           ...
           controllerFuture = MediaController.Builder(
             this,
             sessionToken
           ).buildAsync()
    
           controllerFuture?.addListener({
               mediaController = controllerFuture?.get()
               playerView.player = mediaController
           }, ContextCompat.getMainExecutor(this))
    }
  • আপনি এই অ্যাক্টিভিটির মধ্যে একটি আলাদা মিডিয়া প্লেয়ার ইনস্ট্যান্টিয়েশন করা এড়াতে চান, কিন্তু পরিবর্তে, আপনি আপনার প্রাথমিক পরিষেবার মধ্যে একটি সেন্ট্রাল ExoPlayer বা মিডিয়া প্লেয়ার বজায় রাখতে চান, যেমন একটি Media3 মিডিয়া লাইব্রেরি পরিষেবা, অডিও এবং ভিডিও স্ট্রিম উভয়ের সাথে মিলিতভাবে পরিচালনা করা।

  • তাই মোশন চলাকালীন, কোনও অ্যাক্টিভ পরিষেবা বাউন্ড না থাকলে, প্লেয়ার শুধু অডিও ডিকোড করে, কিন্তু তারপর পার্কিংয়ের সময় ড্রাইভার আপনার ভিডিও অ্যাক্টিভিটি খুললে, আপনি এর রেন্ডারিং সারফেস সরাসরি অন্তর্নিহিত পরিষেবা প্লেয়ারের সাথে অ্যাটাচ করতে চান।

  • তাই Media3 ব্যবহার করে, mediaController নেটিভভাবে প্লেয়ার প্রয়োগ করে, তাই সরাসরি অ্যাসাইন করার অনুমতি দেয়, যেমন আপনি এখানে দেখছেন, playerView সেট-- playerView.player সরাসরি mediaController-এ সেট করে।

  • তাই, এর পরে, আপনি ParkedOnlyOnClickListener ব্যবহার করে আপনার নেটিভ এন্ট্রি পয়েন্ট রেজিস্টার করতে চাইবেন।

    val watchVideoAction = Action.Builder()
      .setTitle("Watch Video")
      .setIcon(videoCarIcon)
      .setOnClickListener(
        ParkedOnlyOnClickListener.create {
          val intent = Intent(
            carContext,
            VideoPlayerActivity::class.java
          )
            .apply {
              addFlags(
                Intent.FLAG_ACTIVITY_NEW_TASK
              )
            }
          carContext.startActivity(intent)
        })
      .build()
  • এই র‍্যাপার আপনার মিডিয়া প্লেব্যাক ইন্টারফেসের হেডার বারে ইনটেন্ট ট্রিগার প্রদান করে।

  • তাই ভিডিও প্লেব্যাক চালু করার জন্য একটি অ্যাকশন যোগ করা, ParkedOnlyOnClickListener-এ এর সিলেকশন লিসেনার র‍্যাপ করা।

  • তাই ড্রাইভিং মোডে, এই ট্যাপগুলি হোস্ট অ্যাপ দ্বারা ইন্টারসেপ্ট করা হয়, যা একটি সিস্টেম নিরাপত্তা মেসেজ দেখায়, তাই আপনি গাড়ি চালানোর সময় সেই স্ক্রিনে যেতে পারবেন না, তবে আপনি পার্ক করার সময়, কলব্যাক নির্দিষ্ট ফুল-স্ক্রিন অ্যাক্টিভিটি চালু করতে carContext-এর মধ্যে startActivity ট্রিগার করে।

  • মনে রাখবেন, এইসব কার অ্যাপ লাইব্রেরি অ্যাপে, আপনাকে ম্যানিফেস্টের মধ্যে ভিডিও টার্গেটকে distractionOptimized=false হিসেবে ফ্ল্যাগ করতে হবে যাতে অপারেটিং সিস্টেম বুঝতে পারে যে এটি শুধুমাত্র পার্ক করা ওয়ার্কফ্লো।

    <activity
       android:name=".VideoPlayerActivity"
       android:exported="false"
       android:launchMode="singleTop">
       <meta-data
           android:name="distractionOptimized"
           android:value="false" />
    </activity>

পার্ক থেকে ড্রাইভ মোডে ট্রানজিশন ম্যানেজ করা

  • এবং সবশেষে, ড্রাইভার পার্কিং থেকে ড্রাইভ মোডে শিফ্ট করলে কী হয় তা দেখা যাক।

  • অ্যাক্টিভিটি ডিসট্রাকশন-অপ্টিমাইজড না হলে, গাড়ি চলার সময় সেটি অ্যাক্টিভ থাকলে, AAOS একটি সিস্টেম ব্লকিং ওভারলে দেখায় যা আপনাকে মূলত বলে যে অ্যাপটি ব্যবহার করা চালিয়ে যেতে গাড়ি পার্ক করুন।

  • এই ব্লক করা স্ক্রিন এড়াতে, আমাদের লক্ষ্য হল অডিওতে বাধা না দিয়ে নির্বিঘ্নে মিডিয়া প্লেব্যাক টেমপ্লেটে ফিরে আসা।

  • তাই এখানে isRequiresDistractionOptimization-এর মান true হলে, আমরা মূলত আপনার অন্তর্নিহিত মিডিয়া সেশন থেকে ভিডিও রেন্ডারিং সারফেস রেন্ডার করা বন্ধ করতে যাচ্ছি এবং প্লেয়ার অ্যাক্টিভিটিতে ফিনিশ কল করতে যাচ্ছি কারণ এটি আপনার CAL অভিজ্ঞতার উপরে লঞ্চ করা হয়েছিল, এটি শেষ করলে সরাসরি আপনার মিডিয়া প্লেব্যাক টেমপ্লেটে ফিরে আসে এবং সেই অডিও প্লেব্যাক চালিয়ে যায়।

    class VideoPlayerActivity : ComponentActivity(){
      override fun onStart() {
    
        …
    
        if (uxRestrictionsManager?
            .currentCarUxRestrictions?
            .isRequiresDistractionOptimization
                == true) {
          revertToCarAppTemplate()
        }
      }
    
      private fun revertToCarAppTemplate() {
        mediaControllerCompat
          .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                       null, null)
        finish()
      }
    }
  • ব্যবহারকারীকে দুর্দান্ত অভিজ্ঞতা দেওয়ার জন্য অডিও নিরবচ্ছিন্নভাবে প্লে করা অত্যন্ত গুরুত্বপূর্ণ, তাই ফোরগ্রাউন্ড সার্ভিস হিসেবে আপনার মিডিয়া সেশন অ্যাক্টিভ রাখার মাধ্যমে, এইসব স্ট্যাটাস পরিবর্তন জুড়ে সাউন্ড নিরবচ্ছিন্নভাবে চলতে থাকে।

    <activity
            android:name="androidx.car.app.activity.CarAppActivity"
            android:exported="true"
            android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    
            <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
        </intent-filter>
        <meta-data
                android:name="distractionOptimized"
                android:value="true" />
    </activity>
  • SHOW_MEDIA_PLAYBACK ইনটেন্ট ক্যাপচার করতে CAL স্ক্রিনে onNewIntent ওভাররাইড করতে হবে।

    class MyCarAppSession : Session() {
        override fun onCreateScreen(intent: Intent): Screen {
            // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
            val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
            mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
    
            // 2. Handle deep link if cold-started from the vehicle's media widget
            handlePlaybackIntent(intent)
            return HomeScreen(carContext)
        }
        override fun onNewIntent(intent: Intent) {
            super.onNewIntent(intent)
    
            // 3. Handle deep link when the session is already running
            handlePlaybackIntent(intent)
        }
    }
  • এর ফলে, ব্যবহারকারী যখনই গাড়ির হোম স্ক্রিনে থাকা কোনও ভেহিকল সিস্টেম মিডিয়া উইজেটের সাথে ইন্টার‍্যাক্ট করেন, ডিপ লিঙ্কটি তাদের সরাসরি Car App Library-তে আপনার 'এখন চলছে' ভিউতে নিয়ে যায়।

  • তাই ডেভেলপমেন্ট প্রসেস জুড়ে এইসব ট্রানজিশন যাচাই করা সত্যিই সহজ।

  • আপনি AAOS-এ adb কমান্ড এক্সিকিউট করতে পারবেন।

  • এই ক্ষেত্রে, আপনি যখন অ্যাক্টিভিটির মধ্যে আবার অদলবদল করতে প্রস্তুত হবেন তখন এটি emulate-driving-state drive বা emulate-driving-state park হবে।

  • তাই এখানে পার্ক-টু-ড্রাইভ ভিডিও প্লেব্যাক সহ Car App Library ব্যবহার করে আমাদের নতুন স্যাম্পেল Media3 মিডিয়া অ্যাপ ব্যবহার করার একটি উদাহরণ দেওয়া হল।

  • তাই, নিচের তলায় আমাদের অ্যাডাপ্টিভ Android বুথে এবং খুব শীঘ্রই আমাদের car-samples GitHub-এ এটি চেক করে দেখুন।

  • পার্ক-টু-ড্রাইভ ক্ষমতা বর্তমানে Android Automotive OS-এ সেইসব মিডিয়া অ্যাপের জন্য উপলভ্য যেগুলি ড্রাইভের অভিজ্ঞতার জন্য আগে থেকেই গাড়ির CAL-এর সাথে ইন্টিগ্রেট করা আছে, যেখানে তারা এখন পার্ক করার সময় আরও শক্তিশালী অভিজ্ঞতা অফার করতে পারে।

  • developer.android.com-এ আমাদের ডকুমেন্টেশনে খুব শীঘ্রই এটি চেক করুন এবং আপনার অ্যাপে এটি ফিচার করার জন্য আগ্রহ প্রকাশ করুন।

  • পল।

গাড়ির অ্যাপ লাইব্রেরিতে কী আসতে চলেছে

  • দারুণ।

  • ধন্যবাদ, থমাস।

  • শেষ করার আগে, এই বছরের শেষের দিকে কী কী আসতে চলেছে সেই সম্পর্কে আরও জানার জন্য আমার কাছে আপনার সাথে শেয়ার করার মতো কয়েকটি উপায় রয়েছে।

  • টমাস যেমন উল্লেখ করেছেন, CAL 1.9 বর্তমানে আলফা ভার্সনে রয়েছে।

  • এটি খুব শীঘ্রই বিটা ভার্সনে আপগ্রেড করা হবে।

  • এবং তারপর CAL 1.10 বছরের শেষ হওয়ার আগে আলফাতে প্রবেশ করবে, যাতে আপনি কথোপকথনমূলক UI এবং লেটেস্ট কমিউনিকেশন এবং পার্ক-টু-ড্রাইভ ক্ষমতার মূল্যায়ন শুরু করতে পারেন।

  • সবশেষে, আমি যেমন উল্লেখ করেছি, Android Auto এবং Android Automotive OS-এ গেম উপলভ্য, তাই গাড়ির জন্য আপনার গেমের নাম অপ্টিমাইজ করার জন্য এটিই উপযুক্ত সময়।

  • প্রয়োগ করার ব্যাপারে আরও জানতে, "গাড়ির জন্য গেম তৈরি করুন" গাইডের ডকুমেন্টেশন পর্যালোচনা করতে ভুলবেন না।

  • গাড়ির জন্য আপনার গেম কীভাবে মানানসই করবেন এবং গাড়ির জন্য Android-এ আর কী কী নতুন ও পরিবর্তন হচ্ছে তা ট্র্যাক করার ব্যাপারে আমাদের "নতুন কী আছে" পৃষ্ঠা থেকে আরও জানতে পারবেন।

  • আমরা আশা করি যে আপনি দেখেছেন কীভাবে গাড়ি এবং তাদের ব্যবহারকারীরা আপনার অ্যাপের জন্য প্রস্তুত।

  • আপনি পার্ক করা অবস্থায় সমৃদ্ধ অভিজ্ঞতার জন্য আপনার বিদ্যমান অ্যাডাপ্টিভ অ্যাপের উপর ভিত্তি করে তৈরি করতে পারেন এবং নিরাপদ ড্রাইভিং-অপ্টিমাইজ করা অভিজ্ঞতা তৈরি করতে বিভিন্ন ধরনের অ্যাপ কার অ্যাপ লাইব্রেরি টেমপ্লেট ব্যবহার করতে পারেন।

  • প্রকাশ করার আগে, আপনি ডেস্কটপ হেড ইউনিট, এমুলেটর, Pixel Tablet-এ চলা AAOS বা Firebase টেস্ট ল্যাব ব্যবহার করে পুঙ্খানুপুঙ্খভাবে পরীক্ষা করতে পারেন।

  • এই ইকোসিস্টেমের জন্য অ্যাপ তৈরি করার দক্ষতা আপনার আগে থেকেই আছে এবং লক্ষ লক্ষ গাড়ি আপনার অ্যাপের জন্য অপেক্ষা করছে, তাই সেই অ্যাপটি রাস্তায় নিয়ে আসুন।

কোড

কোড স্নিপেট

"পার্ক করা গাড়ির জন্য অ্যাপ ডেভেলপ করা" ভিডিওর 09:03-এ শেল স্নিপেট
android skills list
android skills add android-for-cars-parked-apps
"পার্ক-টু-ড্রাইভ ক্ষমতা" ভিডিওর 15:20-এ Kotlin স্নিপেট
override fun onStart() {
       super.onStart()
       ...
       controllerFuture = MediaController.Builder(
         this,
         sessionToken
       ).buildAsync()

       controllerFuture?.addListener({
           mediaController = controllerFuture?.get()
           playerView.player = mediaController
       }, ContextCompat.getMainExecutor(this))
}
"পার্ক-টু-ড্রাইভ ক্ষমতা" ভিডিওর ১৬:০৬-এ Kotlin স্নিপেট
val watchVideoAction = Action.Builder()
  .setTitle("Watch Video")
  .setIcon(videoCarIcon)
  .setOnClickListener(
    ParkedOnlyOnClickListener.create {
      val intent = Intent(
        carContext,
        VideoPlayerActivity::class.java
      )
        .apply {
          addFlags(
            Intent.FLAG_ACTIVITY_NEW_TASK
          )
        }
      carContext.startActivity(intent)
    })
  .build()
"পার্ক-টু-ড্রাইভ ক্ষমতা" ভিডিওর ১৬:৪২-এ XML স্নিপেট
<activity
   android:name=".VideoPlayerActivity"
   android:exported="false"
   android:launchMode="singleTop">
   <meta-data
       android:name="distractionOptimized"
       android:value="false" />
</activity>
"পার্ক থেকে ড্রাইভ মোডে ট্রানজিশন ম্যানেজ করা" ভিডিওর 17:17-এ Kotlin স্নিপেট
class VideoPlayerActivity : ComponentActivity(){
  override fun onStart() {

    …

    if (uxRestrictionsManager?
        .currentCarUxRestrictions?
        .isRequiresDistractionOptimization
            == true) {
      revertToCarAppTemplate()
    }
  }

  private fun revertToCarAppTemplate() {
    mediaControllerCompat
      .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                   null, null)
    finish()
  }
}
"পার্ক থেকে ড্রাইভ মোডে ট্রানজিশন ম্যানেজ করা" ভিডিওর 17:36-এ XML স্নিপেট
<activity
        android:name="androidx.car.app.activity.CarAppActivity"
        android:exported="true"
        android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />

        <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
    </intent-filter>
    <meta-data
            android:name="distractionOptimized"
            android:value="true" />
</activity>
"পার্ক থেকে ড্রাইভ মোডে ট্রানজিশন ম্যানেজ করা" ভিডিওর 17:49-এ Kotlin স্নিপেট
class MyCarAppSession : Session() {
    override fun onCreateScreen(intent: Intent): Screen {
        // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
        val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
        mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)

        // 2. Handle deep link if cold-started from the vehicle's media widget
        handlePlaybackIntent(intent)
        return HomeScreen(carContext)
    }
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)

        // 3. Handle deep link when the session is already running
        handlePlaybackIntent(intent)
    }
}