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

মিডিয়ার সাথে ইন্টারঅ্যাক্ট করে এমন উপাদানগুলি টেবিলে বর্ণনা করা হয়েছে:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<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 তে পরিবর্তন করে, তখন সাইন-ইন প্রক্রিয়া শুরু হয়, যার মধ্যে একটি নির্দিষ্ট ত্রুটি কোড অন্তর্ভুক্ত থাকে (নীচে বিস্তারিত দেখুন)। যখন এটি ঘটে, তখন মিডিয়া ত্রুটির বিবরণ এবং মিডিয়া অ্যাপ দ্বারা বাস্তবায়িত একটি সাইন-ইন কার্যকলাপে নেভিগেট করার জন্য একটি সুযোগ প্রদর্শন করে।

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

স্বাভাবিক 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 এর সমান। এটি ইঙ্গিত দেয় যে সাইন-ইন সম্পূর্ণ না হওয়া পর্যন্ত অন্য কোনও ক্রিয়াকলাপ সম্ভব নয়।