সিস্টেম উপাদান এবং ব্যবহারকারী প্রবাহ

নিম্নলিখিত চিত্রটি মিডিয়ার সাথে ইন্টারঅ্যাক্ট করে এমন উপাদানগুলিকে চিত্রিত করে:

সিস্টেম উপাদান

চিত্র 1. সিস্টেমের উপাদান

এই চিত্রের উপাদানগুলি টেবিলে বর্ণনা করা হয়েছে:

কম্পোনেন্ট বর্ণনা
হোম স্ক্রীন গাড়ির UI-তে অন্যান্য সারফেসের প্রতিনিধিত্ব করে যা বর্তমানে প্লে করা মিডিয়াকে প্রদর্শন ও নিয়ন্ত্রণ করে। AOSP-এ, সিস্টেমটি শুরু হলে এটি প্রধান স্ক্রীন প্রদর্শিত হয়। এই স্ক্রীন থেকে, ব্যবহারকারীরা প্লে করা মিডিয়া আইটেমের বিশদ বিবরণ দেখতে পারে এবং একটি সীমিত সেট স্ট্যান্ডার্ড এবং কাস্টম অ্যাকশন চালাতে পারে (উদাহরণস্বরূপ, প্লে এবং পজ)।
সিস্টেম UI মিডিয়াতে নেভিগেট করার মতো গ্লোবাল UI নেভিগেশন বিকল্পগুলি অন্তর্ভুক্ত করে এমন কার্যকারিতা প্রদান করে৷
সহকারী অ্যান্ড্রয়েড সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য বিভিন্ন ভয়েস অ্যাসিস্ট্যান্ট অ্যাপের মেকানিজম প্রদান করে। এই অ্যাপগুলি ব্যাকগ্রাউন্ডে মিডিয়া সোর্সের সাথে ইন্টারঅ্যাক্ট করতে পারে (উদাহরণস্বরূপ, একটি ভয়েস কমান্ডের ফলে একটি গান বাজানো), অথবা অগ্রভাগে মিডিয়াতে নেভিগেট করতে পারে (উদাহরণস্বরূপ, যখন একটি ভয়েস সহকারী অ্যাপকে একটি UI প্রদর্শন করার জন্য নির্দেশ দেওয়া হয় নির্দিষ্ট মিডিয়া উত্স)।
অ্যাপ লঞ্চার মিডিয়া সোর্স সহ সমস্ত Android অ্যাপ অ্যাপ লঞ্চারে শুরু হয়। মিডিয়া তার নিজস্ব মিডিয়া সোর্স নির্বাচক উপস্থাপন করতে পারে, মিডিয়ার জন্য শুরুর স্থান হিসাবে অ্যাপ লঞ্চারকে পরিপূরক বা প্রতিস্থাপন করতে পারে।
গুগল প্লে স্টোর যখন GAS ব্যবহার করা হচ্ছে, তখন ব্যবহারকারীরা একটি Android ডিভাইসে নতুন অ্যাপগুলি সনাক্ত করে এবং ইনস্টল করে। মিডিয়ার জন্য, একবার অ্যাপগুলি ইনস্টল হয়ে গেলে, ব্যবহারকারীদের সাইন-ইন প্রক্রিয়াটি সম্পূর্ণ করতে বা অ্যাপের সাথে ইন্টারঅ্যাক্ট শুরু করার জন্য মিডিয়াতে নির্দেশ দেওয়া হয়।
মিডিয়া সেশন ম্যানেজার Android সিস্টেম পরিষেবা যা সমস্ত মিডিয়া উত্স থেকে মিডিয়া সেশনগুলি ট্র্যাক এবং নিয়ন্ত্রণ করে৷ মিডিয়া সোর্স যখন ফোরগ্রাউন্ড মিডিয়া সোর্স হয়ে যায় তখন এটি সনাক্ত করার মেকানিজম প্রদান করে। মিডিয়া, এবং অন্যান্য সমস্ত অ্যাপ যা বর্তমানে বাজানো মিডিয়া উত্স (উদাহরণস্বরূপ, হোম স্ক্রীন) প্রদর্শন করে, এই ইভেন্টগুলি সনাক্ত করতে এবং সেই অনুযায়ী UI আপডেট করতে মিডিয়া সেশন ম্যানেজার ব্যবহার করে৷ মিডিয়া সোর্স মিডিয়া সেশন ম্যানেজারের সাথে মিডিয়া সেশন API এর মাধ্যমে ইন্টারঅ্যাক্ট করে।
রেডিও রেডিও হার্ডওয়্যারের সাথে ইন্টারঅ্যাক্ট করার জন্য বিশেষ অ্যাপ। রেডিও রেডিও স্টেশনগুলির জন্য অনুসন্ধান করে, দ্রুত সম্প্রতি চিহ্নিত স্টেশনগুলি নির্বাচন করে এবং রেডিও ব্যান্ডগুলির মধ্যে পরিবর্তন করে৷ রেডিও এবং মিডিয়া উভয়ের দ্বারা ভাগ করা UI উপাদানগুলি ব্যবহারকারীকে দুটি অভিজ্ঞতার মধ্যে স্যুইচ করতে সক্ষম করে।
ড্রাইভারের বিক্ষেপণ ইঞ্জিন গাড়ির ড্রাইভিং অবস্থার উপর ভিত্তি করে UX বিধিনিষেধ আরোপ করতে ব্যবহৃত Android সিস্টেম পরিষেবা। মিডিয়া সোর্স সাইন-ইন এবং UX সেটিংসের জন্য (যেখানে স্ক্রিন সরাসরি মিডিয়া সোর্স দ্বারা নিয়ন্ত্রিত হয়), এই পরিষেবা নিশ্চিত করে যে গাড়িটি ড্রাইভিং অবস্থায় থাকা অবস্থায় কোনো অনিরাপদ সামগ্রী প্রদর্শিত হবে না। OEMগুলি এই অবস্থাগুলির সংজ্ঞা এবং এই পরিস্থিতিতে কীভাবে সিস্টেম প্রতিক্রিয়া দেখায় তা কাস্টমাইজ করতে পারে (উদাহরণস্বরূপ, একটি ব্লকিং স্ক্রিন ওভারলে প্রদর্শন করে)।

ব্যবহারকারীর প্রবাহ

মিডিয়া অ্যাপ লঞ্চ

মিডিয়া চালু করার প্রক্রিয়াটি নীচে প্রদর্শিত হবে।

মিডিয়া অ্যাপ লঞ্চ

চিত্র 2. মিডিয়া অ্যাপ লঞ্চ

নিম্নলিখিত অন্তর্নিহিত CAR_INTENT_ACTION_MEDIA_TEMPLATE ব্যবহার করে মিডিয়া চালু করতে হবে। এই উদ্দেশ্য অতিরিক্ত হিসাবে নিম্নলিখিত তথ্য থাকতে পারে:

  • android.car.intent.extra.MEDIA_COMPONENT ( ঐচ্ছিক )। মিডিয়া অ্যাপ্লিকেশানে একটি MediaBrowserService এর সমতল কম্পোনেন্ট নামের প্রতিনিধিত্ব করার জন্য অতিরিক্ত স্ট্রিং যা মিডিয়াকে সংযুক্ত করতে হবে৷ সরবরাহ না করা হলে, মিডিয়া বর্তমানে নির্বাচিত মিডিয়া অ্যাপ প্রদর্শন করে। এই অভিপ্রায় নিম্নলিখিত এন্ট্রি পয়েন্ট থেকে ব্যবহার করা হয়:

    • সিস্টেম UI। মিডিয়া অভিজ্ঞতায় ফিরে যেতে বা প্রথমবার এটি ব্যবহার শুরু করতে ব্যবহৃত হয়। এই ক্ষেত্রে, উপরের অভিপ্রায়টি কোনও অতিরিক্ত ছাড়াই ব্যবহার করা হবে যাতে মিডিয়া বর্তমানে নির্বাচিত মিডিয়া অ্যাপ প্রদর্শন করতে পারে।

    • হোম স্ক্রীন, সহকারী এবং বিজ্ঞপ্তি কেন্দ্র। ব্যবহারকারীরা বর্তমানে নির্বাচিত মিডিয়া অ্যাপ প্রদর্শন করতে মিডিয়াতে নেভিগেট করতে পারেন। সব ক্ষেত্রে, অতিরিক্ত ছাড়া অন্তর্নিহিত অভিপ্রায় ট্রিগার হয়।

    • অ্যাপ লঞ্চার। যখন ব্যবহারকারীরা অ্যাপ লঞ্চার থেকে একটি মিডিয়া অ্যাপ নির্বাচন করেন, তখন উপরের অভিপ্রায় CAR_EXTRA_MEDIA_COMPONENT অতিরিক্ত অন্তর্ভুক্ত করে, যা নির্বাচিত মিডিয়া অ্যাপ ধারণ করে। মিডিয়া এটিকে নতুন নির্বাচিত অ্যাপ হিসাবে মনোনীত করে এবং এটির সাথে সংযোগ করে। বিস্তারিত জানার জন্য, নীচের বিভাগটি দেখুন, অ্যাপ লঞ্চার থেকে মিডিয়া ইন্টিগ্রেশন।

মিডিয়া ইন্টিগ্রেশনে অ্যাপ লঞ্চার

মিডিয়া অ্যাপ্লিকেশানগুলিকে android.intent.category.LAUNCHER বিভাগের সাথে টীকাযুক্ত কোনো কার্যকলাপ প্রদান করার অনুমতি নেই৷ ফলস্বরূপ, অ্যাপ লঞ্চারকে (বা এর সমতুল্য) মিডিয়া সোর্স ইন্টিগ্রেশনের জন্য বিশেষ যুক্তি প্রয়োগ করতে হবে:

  • MediaBrowserService.SERVICE_INTERFACE বাস্তবায়নকারী প্যাকেজগুলির জন্য অ্যাপ লঞ্চারকে অবশ্যই সিস্টেম স্ক্যান করতে হবে। এই প্যাকেজগুলির জন্য, অ্যাপ লঞ্চার অন্যান্য ক্রিয়াকলাপগুলি আনার জন্য ব্যবহৃত পরিষেবা আইকনটির অনুরূপ আনয়ন করে৷

  • অ্যাপ লঞ্চার তারপর এই প্যাকেজগুলিকে সেই প্যাকেজগুলির সাথে একত্রিত করে যা android.intent.category.LAUNCHER কার্যক্রম বাস্তবায়ন করে৷ যদি একটি অ্যাপ একটি MediaBrowserService বাস্তবায়ন এবং একটি লঞ্চার কার্যকলাপ প্রদান করে, তাহলে পরিষেবাটি অগ্রাধিকার পায়।

    এই লেখা পর্যন্ত, কোনো মিডিয়া সোর্স অ্যাপ লঞ্চার অ্যাক্টিভিটি প্রদান করতে পারে না।

  • এই যুক্তির একটি উদাহরণ AppLauncherUtils#getAllLauncherApps() এ AOSP কোডে পাওয়া যাবে।

সাইন-ইন প্রবাহ এবং কনফিগারেশন বিকল্প

মিডিয়া অ্যাপ্লিকেশানগুলি একটি গাড়ি-অপ্টিমাইজ করা সেটিংস কার্যকলাপ অন্তর্ভুক্ত করতে পারে৷ এই ধরনের কার্যকলাপ ব্যবহার করা যেতে পারে ব্যবহারকারীর প্রবাহ বাস্তবায়নের জন্য যা Android Media API দ্বারা সম্বোধন করা হয়নি, উদাহরণস্বরূপ:

  • সাইন ইন করুন
  • সাইন-আউট করুন
  • অ্যাকাউন্ট স্যুইচিং
  • প্রদর্শন করুন যেখানে ব্যবহারকারী বর্তমানে লগ ইন করেছেন (যদি থাকে)
  • পরিষেবা কনফিগারেশন

সাইন-এন প্রবাহ

চিত্র 3. সাইন-ইন প্রবাহ

এই সেটিংস কার্যকলাপ নিম্নলিখিত অভিপ্রায় ফিল্টার সহ মিডিয়া অ্যাপ দ্বারা ঘোষণা করা হয়েছে:

<activity android:name=".AppSettingsActivity"
          android:exported="true
          android:theme="@style/SettingsActivity"
           android:label="@string/app_settings_activity_title">
   <intent-filter>
       <action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
   </intent-filter>
</activity>

মিডিয়াকে অবশ্যই নিম্নলিখিত যুক্তি প্রয়োগ করতে হবে:

  • বর্তমানে নির্বাচিত মিডিয়া অ্যাপটিতে প্রদত্ত ইন্টেন্ট ফিল্টার সহ একটি কার্যকলাপ রয়েছে কিনা তা পরীক্ষা করুন৷

  • যদি তাই হয়, ব্যবহারকারীকে কার্যকলাপে নেভিগেট করার অনুমতি দিন।

  • যদি গাড়ির UX বিধিনিষেধ কার্যকর হয় (উদাহরণস্বরূপ, গাড়ি চলছে), এই সামর্থ্য নিষ্ক্রিয় করা উচিত কারণ সেটিংস কার্যকলাপ একটি ড্রাইভার অপ্টিমাইজড UI নয়৷

ত্রুটি হ্যান্ডলিং এবং প্রয়োজনীয় সাইন-ইন

মিডিয়া অ্যান্ড্রয়েড মিডিয়া সেশন API এর মাধ্যমে মিডিয়া অ্যাপের সাথে ইন্টারঅ্যাক্ট করে। এই API-এর অংশ হিসাবে, মিডিয়া একটি PlaybackState অবজেক্ট পায়, যা মিডিয়া অ্যাপের বর্তমান অবস্থার সাথে যোগাযোগ করে।

সাইন-ইন প্রক্রিয়া শুরু হয় যখন মিডিয়া অ্যাপ PlaybackState STATE_ERROR এ পরিবর্তন করে, একটি নির্দিষ্ট ত্রুটি কোড সহ (নীচে বিশদ বিবরণ দেখুন)। যখন এটি ঘটে, মিডিয়া ত্রুটির বিবরণ এবং মিডিয়া অ্যাপ দ্বারা বাস্তবায়িত একটি সাইন-ইন কার্যকলাপে নেভিগেট করার ক্ষমতা প্রদর্শন করে৷

এই একই প্রবাহ অন্যান্য ত্রুটির পরিস্থিতি (উদাহরণস্বরূপ, একটি সার্ভার সংযোগ ত্রুটি) সংকেত করতে অ্যাপ্লিকেশন দ্বারা ব্যবহার করা যেতে পারে।

ত্রুটি হ্যান্ডলিং

চিত্র 4. ত্রুটি হ্যান্ডলিং

সাধারণ PlaybackState ত্রুটি পরিচালনার অংশ হিসাবে, মিডিয়াকে অবশ্যই নিম্নলিখিত ইনপুট পরীক্ষা করতে হবে৷

  • PlaybackState ত্রুটি কোড PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED এর সমান। এটি সংকেত দেয় যে মিডিয়া অ্যাপের অপারেশন চালিয়ে যেতে সাইন-ইন করতে হবে। অন্যান্য ত্রুটি কোড প্রাপ্ত করা যেতে পারে, যা অন্য ধরনের ত্রুটি পরিস্থিতি নির্দেশ করবে।

  • PlaybackState ত্রুটি বার্তা ( PlaybackStateCompat.Builder#setErrorMessage পদ্ধতি ব্যবহার করে মিডিয়া অ্যাপ দ্বারা সেট করা) একটি মানব-পাঠযোগ্য ব্যাখ্যা রয়েছে (উদাহরণস্বরূপ, "আপনি সাইন ইন করেননি")। এই বার্তাটি অবশ্যই ব্যবহারকারীর কাছে প্রদর্শিত হবে এবং এটি অবশ্যই ড্রাইভিং ডিস্ট্রাকশন অপ্টিমাইজড (DO) হতে হবে।

  • ঐচ্ছিকভাবে, PlaybackState নিম্নলিখিত কীগুলির সাথে নিম্নলিখিত অতিরিক্তগুলি ( PlaybackStateCompat.Builder#setExtras পদ্ধতির মাধ্যমে মিডিয়া অ্যাপ দ্বারা সেট করা) অন্তর্ভুক্ত করতে পারে৷

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL । সাইন-ইন প্রবাহ শুরু করার জন্য ব্যবহারকারীর দ্বারা স্পর্শ করা বোতামটিতে প্রদর্শিত হবে এমন একটি স্ট্রিংয়ে সেট করুন যাতে মানব-পঠনযোগ্য বার্তা রয়েছে৷

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT । ব্যবহারকারী উপরে উল্লিখিত বোতামে ক্লিক করলে ট্রিগার হওয়ার জন্য একটি PendingIntent দিয়ে সেট করুন। এই PendingIntent একই মিডিয়া অ্যাপ দ্বারা বাস্তবায়িত একটি কাস্টম সাইন-ইন কার্যকলাপ নির্দেশ করে৷

  • PlaybackState অবস্থা STATE_ERROR এর সমান। এটি সাইন-ইন সম্পূর্ণ না হওয়া পর্যন্ত অন্য কোন অপারেশন সম্ভব নয় বলে নির্দেশ করে।