একটি টেমপ্লেটেড মিডিয়া অ্যাপ তৈরি করুন

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

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

এই নির্দেশিকাটি ধরে নেয় যে আপনার কাছে ইতিমধ্যেই একটি মিডিয়া অ্যাপ আছে যা ফোনে অডিও প্লে করে এবং আপনার মিডিয়া অ্যাপটি অ্যান্ড্রয়েড মিডিয়া অ্যাপ আর্কিটেকচার মেনে চলে। কার অ্যাপ লাইব্রেরি আপনাকে 'Build media apps for cars' MediaBrowser ডেটা স্ট্রাকচার ব্যবহার করে তৈরি টেমপ্লেটের পরিবর্তে ইন-অ্যাপ অভিজ্ঞতাকে টেমপ্লেট দিয়ে প্রতিস্থাপন করার ক্ষমতা দেয়। প্লেব্যাক নিয়ন্ত্রণের জন্য আপনাকে অবশ্যই একটি MediaSession এবং সুপারিশ ও অন্যান্য স্মার্ট অভিজ্ঞতার জন্য একটি MediaBrowserService প্রদান করতে হবে।

আপনার অ্যাপের ম্যানিফেস্ট কনফিগার করুন

"অ্যান্ড্রয়েড ফর কারস অ্যাপ লাইব্রেরি ব্যবহার" অংশে বর্ণিত ধাপগুলো ছাড়াও, টেমপ্লেটেড মিডিয়া অ্যাপগুলোর জন্য নিম্নলিখিত বিষয়গুলো প্রয়োজন:

আপনার ম্যানিফেস্টে ক্যাটাগরি সাপোর্ট ঘোষণা করুন।

আপনার অ্যাপের CarAppService এর ইন্টেন্ট ফিল্টারে androidx.car.app.category.MEDIA কার অ্যাপ ক্যাটাগরিটি ডিক্লেয়ার করতে হবে।

<application>
    ...
   <service
       ...
        android:name=".MyCarAppService"
        android:exported="true">
      <intent-filter>
        <action android:name="androidx.car.app.CarAppService" />
        <category android:name="androidx.car.app.category.MEDIA"/>
      </intent-filter>
    </service>
    ...
<application>

MediaPlaybackTemplate এ অ্যাক্সেস পেতে হলে, আপনার অ্যাপের ম্যানিফেস্ট ফাইলে androidx.car.app.MEDIA_TEMPLATES পারমিশনটিও ডিক্লেয়ার করতে হবে:

<manifest ...>
  ...
  <uses-permission android:name="androidx.car.app.MEDIA_TEMPLATES"/>
  ...
</manifest>

গাড়ির অ্যাপের সর্বনিম্ন API স্তর সেট করুন

MediaPlaybackTemplate ব্যবহারকারী মিডিয়া অ্যাপগুলো শুধুমাত্র CAL API 8-এ সমর্থিত, তাই নিশ্চিত করুন যে আপনার সর্বনিম্ন Car App API level 8-এ সেট করা আছে।

<application ...>
  ...
  <meta-data
    android:name="androidx.car.app.minCarApiLevel"
    android:value="8"/>
  ...
</application>

অ্যান্ড্রয়েড অটো সমর্থন ঘোষণা করুন

আপনার অ্যাপের ম্যানিফেস্টে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত আছে কিনা তা নিশ্চিত করুন:

<application>
  ...
  <meta-data android:name="com.google.android.gms.car.application"
      android:resource="@xml/automotive_app_desc"/>
  ...
</application>

এরপর, আপনার এক্সএমএল রিসোর্সের automotive_app_desc.xml ফাইলে টেমপ্লেট ডিক্লারেশনটি যোগ করুন। এটি দেখতে নিম্নলিখিতের মতো হবে:

<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
 <uses name="media"/>
 <uses name="template"/>
</automotiveApp>

একটি অ্যাট্রিবিউশন আইকন প্রদান করুন

কার অ্যাপ লাইব্রেরি ব্যবহার করে তৈরি মিডিয়া অ্যাপগুলোর জন্য একটি অ্যাট্রিবিউশন আইকন যোগ করতে ভুলবেন না।

ভয়েস অ্যাকশন সমর্থন করুন

ব্যবহারকারীদের হাত ব্যবহার না করেই সাধারণ কাজগুলো সম্পন্ন করার সুযোগ দিতে আপনার অ্যাপটিকে ভয়েস-সক্ষম করুন। আরও বিস্তারিত বাস্তবায়ন নির্দেশাবলীর জন্য ‘মিডিয়ার জন্য ভয়েস অ্যাকশন সমর্থন’ দেখুন। একটি টেমপ্লেটেড মিডিয়া অ্যাপে যদি আপনি কোনো ভয়েস কমান্ড পান, তাহলে সার্চ রেজাল্ট দিয়ে আপনার MediaBrowserService আপডেট করার প্রয়োজন নেই। এর পরিবর্তে, আপনার মিডিয়া প্লেব্যাক টেমপ্লেটে একটি অ্যাকশন যোগ করার কথা বিবেচনা করুন, যা ব্যবহারকারীকে সেই প্লে বা সার্চ কোয়েরির উপর ভিত্তি করে আরও কন্টেন্ট খুঁজে পেতে সাহায্য করবে। VC-1 কোয়ালিটি গাইডলাইন পূরণের জন্য ভয়েস কমান্ড সমর্থন করা আবশ্যক।

আপনার প্লেব্যাক টেমপ্লেট তৈরি করুন

MediaPlaybackTemplate আপনার Car App Library মিডিয়া অ্যাপে মিডিয়া প্লেব্যাকের তথ্য প্রদর্শন করে। এই টেমপ্লেটটি একটি শিরোনামসহ হেডার এবং কাস্টমাইজযোগ্য অ্যাকশন সেট করার সুযোগ দেয়, যেখানে মিডিয়ার তথ্য এবং প্লেব্যাক কন্ট্রোলগুলো আপনার অ্যাপের MediaSession এর অবস্থার উপর ভিত্তি করে হোস্ট দ্বারা পূরণ করা হয়।

একটি মিউজিক প্লেয়ারে সামার ফিল্ডিং-এর 'সাউন্ডস অফ স্প্রিং' গানটি বাজছে, সাথে গিটার বাজানো এক মহিলার একটি বর্গাকার প্রতিকৃতি রয়েছে।

চিত্র ১: MediaPlaybackTemplate , যার শীর্ষে কিউ খোলার জন্য একটি হেডার অ্যাকশন রয়েছে।

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

val playbackTemplate = MediaPlaybackTemplate.Builder()
      .setHeader(
        Header.Builder()
          .setStartHeaderAction(Action.BACK)
          .addEndHeaderAction(
                Action.Builder()
                  .setTitle(model.context.getString(R.string.queue_button_title))
                  .setIcon(
                    CarIcon.Builder(
                        IconCompat.createWithResource(
                          model.context,
                          R.drawable.gs_queue_music_vd_theme_24,
                        ))
                      .build())
                  .setOnClickListener(showQueueScreen())
                  .build())
          .setTitle(model.context.getString(R.string.media_playback_view_title))
          .build())
      .build()

যখন আপনি MediaPlaybackTemplate ব্যবহার করেন, তখন আপনার CarAppService এর MediaPlaybackManager ব্যবহার করে একটি MediaSession টোকেন রেজিস্টার করুন। এটি করতে ব্যর্থ হলে, হোস্টে একটি MediaPlaybackTemplate পাঠানোর সময় একটি ত্রুটি প্রদর্শিত হয়।

import androidx.car.app.media.MediaPlaybackManager


override fun onCreateSession(sessionInfo: SessionInfo): Session {
    return object : Session() {
        

        init {
          lifecycle.addObserver(
            LifecycleEventObserver { _, event ->
              if (event == ON_CREATE) {
                val token = ... // MediaSessionCompat.Token
                (carContext.getCarService(CarContext.MEDIA_PLAYBACK_SERVICE) as MediaPlaybackManager)
                  .registerMediaPlaybackToken(token)
              }
              ...
            }
          )
        }
    }
}

অ্যান্ড্রয়েড অটোতে মিডিয়া প্লেব্যাকের তথ্য ও নিয়ন্ত্রণগুলো প্রকাশ করার জন্য .registerMediaPlaybackToken অপরিহার্য। হোস্টের মিডিয়া-নির্দিষ্ট নোটিফিকেশন তৈরি করার জন্যও এটি গুরুত্বপূর্ণ।

টেমপ্লেট ব্যবহার করে মিডিয়া সাজান

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

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

চিত্র ২: একটি SectionedItemTemplate যার মধ্যে একটি RowSection এবং তারপরে একটি GridSection রয়েছে।

TabTemplate-এর ভিতরে SectionedItemTemplate ব্যবহার করা

আপনার অ্যাপের মধ্যে মিডিয়াকে শ্রেণীবদ্ধ করার একটি সুবিধাজনক উপায় হলো TabTemplate এর ভিতরে SectionedItemTemplate ব্যবহার করা।

val template =
      SectionedItemTemplate.Builder()...build();
val tabTemplate = 
      TabTemplate.Builder(tabCallback)
          .setTabContents(TabContents.Builder(template).build)
          .setHeaderAction(Action.APP_ICON)
          
          .build();

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

মিডিয়া ব্রাউজ করার সময়, ব্যবহারকারীর জন্য ন্যূনতম বিভ্রান্তি সহ দ্রুত MediaPlaybackTemplate এ নেভিগেট করতে পারাটা গুরুত্বপূর্ণ। MFT-1 মানের শর্ত পূরণ করতে, আপনার অ্যাপে সমস্ত মিডিয়া ব্রাউজিং স্ক্রিন থেকে MediaPlaybackTemplate অ্যাক্সেস করার একটি উপায় থাকতে হবে।

আপনি যদি SectionedItemTemplate ব্যবহার করেন, তবে একটি ফ্লোটিং অ্যাকশন বাটন যোগ করে এটি করতে পারেন, যা আপনাকে মিডিয়া প্লেব্যাক স্ক্রিনে নিয়ে যাবে । অন্যান্য টেমপ্লেটের ক্ষেত্রে, হেডার অ্যাকশন ব্যবহার করে এটি করা যায়।