আপনার মিডিয়া অ্যাপে Android Automotive OS সমর্থন যোগ করুন

Android Automotive OS ব্যবহারকারীদের গাড়িতে অ্যাপ ইনস্টল করতে দেয়। এই প্ল্যাটফর্মে ব্যবহারকারীদের কাছে পৌঁছানোর জন্য, আপনাকে একটি ড্রাইভার-অপ্টিমাইজ করা অ্যাপ বিতরণ করতে হবে যা Android Automotive OS-এর সাথে সামঞ্জস্যপূর্ণ। আপনি আপনার অ্যান্ড্রয়েড অটো অ্যাপের প্রায় সমস্ত কোড এবং সংস্থানগুলি পুনঃব্যবহার করতে পারেন, তবে আপনাকে অবশ্যই একটি পৃথক বিল্ড তৈরি করতে হবে যা এই পৃষ্ঠার প্রয়োজনীয়তাগুলি পূরণ করে৷

উন্নয়ন ওভারভিউ

অ্যান্ড্রয়েড অটোমোটিভ ওএস সমর্থন যোগ করার জন্য শুধুমাত্র কয়েকটি ধাপের প্রয়োজন, যা অনুসরণ করা বিভাগগুলিতে বর্ণিত হয়েছে:

  1. অ্যান্ড্রয়েড স্টুডিওতে স্বয়ংচালিত বৈশিষ্ট্যগুলি সক্ষম করুন
  2. একটি স্বয়ংচালিত মডিউল তৈরি করুন
  3. আপনার Gradle নির্ভরতা আপডেট করুন
  4. ঐচ্ছিকভাবে, সেটিংস এবং সাইন-ইন কার্যক্রম বাস্তবায়ন করুন
  5. ঐচ্ছিকভাবে, মিডিয়া হোস্টের ইঙ্গিতগুলি পড়ুন

নকশা বিবেচনা

অ্যান্ড্রয়েড অটোমোটিভ ওএস আপনার অ্যাপের মিডিয়া ব্রাউজার পরিষেবা থেকে প্রাপ্ত মিডিয়া সামগ্রীগুলিকে সাজানোর যত্ন নেয়৷ এর মানে হল যে আপনার অ্যাপটি UI আঁকে না এবং যখন কোনো ব্যবহারকারী মিডিয়া প্লেব্যাক ট্রিগার করে তখন আপনার কোনো কার্যক্রম শুরু করে না।

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

আপনার প্রকল্প সেট আপ করুন

Android Automotive OS এর জন্য সমর্থন সক্ষম করতে আপনাকে আপনার অ্যাপের প্রকল্পের বেশ কয়েকটি অংশ সেট আপ করতে হবে।

অ্যান্ড্রয়েড স্টুডিওতে স্বয়ংচালিত বৈশিষ্ট্যগুলি সক্ষম করুন

সমস্ত স্বয়ংচালিত ওএস বৈশিষ্ট্যগুলি সক্ষম রয়েছে তা নিশ্চিত করতে Android স্টুডিও 4.0 বা উচ্চতর ব্যবহার করুন৷

একটি স্বয়ংচালিত মডিউল তৈরি করুন

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

আপনার প্রকল্পে একটি স্বয়ংচালিত মডিউল যোগ করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড স্টুডিওতে, ফাইল > নতুন > নতুন মডিউল ক্লিক করুন।
  2. অটোমোটিভ মডিউল নির্বাচন করুন, তারপর পরবর্তী ক্লিক করুন।
  3. একটি অ্যাপ্লিকেশন/লাইব্রেরির নাম লিখুন। এই নামটি ব্যবহারকারীরা Android Automotive OS-এ আপনার অ্যাপের জন্য দেখতে পান।
  4. একটি মডিউল নাম লিখুন।
  5. আপনার অ্যাপের সাথে মিল রাখতে প্যাকেজের নাম সামঞ্জস্য করুন।
  6. ন্যূনতম SDK-এর জন্য API 28: Android 9.0 (Pie) নির্বাচন করুন এবং তারপর Next এ ক্লিক করুন।

    Android Automotive OS সমর্থন করে এমন সমস্ত গাড়ি Android 9 (API লেভেল 28) বা উচ্চতর সংস্করণে চলে, তাই এই মানটি নির্বাচন করা সমস্ত সামঞ্জস্যপূর্ণ গাড়িকে লক্ষ্য করে।

  7. কোন কার্যকলাপ নির্বাচন করুন, এবং তারপর সমাপ্ত ক্লিক করুন.

অ্যান্ড্রয়েড স্টুডিওতে আপনার মডিউল তৈরি করার পরে, আপনার নতুন অটোমোটিভ মডিউলে AndroidManifest.xml খুলুন:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

application এলিমেন্টে কিছু স্ট্যান্ডার্ড অ্যাপ তথ্যের পাশাপাশি একটি uses-feature উপাদান রয়েছে যা Android Automotive OS-এর জন্য সমর্থন ঘোষণা করে। উল্লেখ্য যে ম্যানিফেস্টে ঘোষিত কোনো কার্যক্রম নেই।

আপনি সেটিংস বা সাইন-ইন কার্যক্রম বাস্তবায়ন করলে, সেগুলি এখানে যোগ করুন। এই ক্রিয়াকলাপগুলি সুস্পষ্ট অভিপ্রায় ব্যবহার করে সিস্টেম দ্বারা ট্রিগার করা হয় এবং আপনার Android Automotive OS অ্যাপের জন্য ম্যানিফেস্টের মধ্যে আপনি ঘোষণা করেন এমন একমাত্র ক্রিয়াকলাপ।

যেকোনো সেটিংস বা সাইন-ইন কার্যক্রম যোগ করার পর, application উপাদানে android:appCategory="audio" বৈশিষ্ট্য সেট করে এবং নিম্নলিখিত uses-feature উপাদান যোগ করে আপনার ম্যানিফেস্ট ফাইলটি সম্পূর্ণ করুন:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:appCategory="audio"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

</manifest>

এই বৈশিষ্ট্যগুলিকে স্পষ্টভাবে required="false" এ সেট করা নিশ্চিত করে যে আপনার অ্যাপটি স্বয়ংচালিত ওএস ডিভাইসে উপলব্ধ হার্ডওয়্যার বৈশিষ্ট্যগুলির সাথে বিরোধ করছে না।

Android Automotive OS এর জন্য মিডিয়া সমর্থন ঘোষণা করুন

আপনার অ্যাপ Android Automotive OS সমর্থন করে তা ঘোষণা করতে নিম্নলিখিত ম্যানিফেস্ট এন্ট্রি ব্যবহার করুন:

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

এই ম্যানিফেস্ট এন্ট্রিটি একটি XML ফাইলকে নির্দেশ করে যা আপনার অ্যাপ সমর্থন করে এমন স্বয়ংচালিত ক্ষমতাগুলি ঘোষণা করে৷

আপনার কাছে একটি মিডিয়া অ্যাপ আছে তা নির্দেশ করতে, আপনার প্রকল্পের res/xml/ ডিরেক্টরিতে automotive_app_desc.xml নামে একটি XML ফাইল যোগ করুন। এই ফাইলে নিম্নলিখিত বিষয়বস্তু অন্তর্ভুক্ত করুন:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

অভিপ্রায় ফিল্টার

Android Automotive OS আপনার মিডিয়া অ্যাপে ক্রিয়াকলাপগুলিকে ট্রিগার করতে সুস্পষ্ট উদ্দেশ্য ব্যবহার করে৷ ম্যানিফেস্ট ফাইলে CATEGORY_LAUNCHER বা ACTION_MAIN ইন্টেন্ট ফিল্টার আছে এমন কোনো কার্যকলাপ অন্তর্ভুক্ত করবেন না।

নিম্নলিখিত উদাহরণের মত কার্যকলাপগুলি সাধারণত একটি ফোন বা অন্য কোন মোবাইল ডিভাইসকে লক্ষ্য করে। ফোন অ্যাপ তৈরি করে এমন মডিউলে এই কার্যকলাপগুলি ঘোষণা করুন, আপনার Android Automotive OS অ্যাপ তৈরি করে এমন মডিউলে নয়।

<activity android:name=".MyActivity">
    <intent-filter>
        <!-- You can't use either of these intents for Android Automotive OS -->
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!--
        In their place, you can include other intent filters for any activities
        that your app needs for Android Automotive OS, such as settings or
        sign-in activities.
        -->
    </intent-filter>
</activity>

আপনার Gradle নির্ভরতা আপডেট করুন

আমরা সুপারিশ করি যে আপনি আপনার মিডিয়া ব্রাউজার পরিষেবাটিকে একটি পৃথক মডিউলে রাখুন যা আপনি আপনার ফোন অ্যাপ এবং আপনার স্বয়ংচালিত মডিউলের মধ্যে ভাগ করেন৷ আপনি যদি এই পদ্ধতিটি ব্যবহার করেন, তাহলে শেয়ার করা মডিউলটি অন্তর্ভুক্ত করতে আপনাকে আপনার স্বয়ংচালিত মডিউল আপডেট করতে হবে, যেমনটি নিম্নলিখিত স্নিপেটে দেখানো হয়েছে:

my-auto-module /build.gradle

গ্রোভি

buildscript {
    ...
    dependencies {
        ...
        implementation project(':shared_module_name')
    }
}

কোটলিন

buildscript {
    ...
    dependencies {
        ...
        implementation(project(":shared_module_name"))
    }
}

সেটিংস এবং সাইন-ইন কার্যক্রম বাস্তবায়ন করুন

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

যদি আপনার Android Automotive OS অ্যাপ ব্যবহারকারীদের সাইন ইন করতে বা অ্যাপ সেটিংস নির্দিষ্ট করতে দিতে হয় তবেই এই কার্যকলাপগুলি বাস্তবায়ন করুন৷ এই কার্যকলাপগুলি Android Auto দ্বারা ব্যবহৃত হয় না৷

কার্যকলাপ কর্মপ্রবাহ

নিম্নলিখিত চিত্রটি দেখায় যে কীভাবে একজন ব্যবহারকারী Android Automotive OS ব্যবহার করে আপনার সেটিংস এবং সাইন-ইন কার্যকলাপের সাথে ইন্টারঅ্যাক্ট করে:

সেটিংস এবং সাইন-ইন কার্যকলাপের জন্য কর্মপ্রবাহ

চিত্র 1. সেটিংস এবং সাইন-ইন কার্যকলাপ কর্মপ্রবাহ।

আপনার সেটিংস এবং সাইন-ইন কার্যকলাপে বিভ্রান্তি নিরুৎসাহিত করুন

ব্যবহারকারীর গাড়ি পার্ক করার সময় আপনার সেটিংস এবং/অথবা সাইন-ইন কার্যকলাপগুলি শুধুমাত্র ব্যবহারের জন্য উপলব্ধ রয়েছে তা নিশ্চিত করতে, <activity> উপাদান(গুলি) নিম্নলিখিত <meta-data> উপাদানগুলিকে অন্তর্ভুক্ত করে না তা যাচাই করুন। আপনার অ্যাপ পর্যালোচনার সময় প্রত্যাখ্যান করা হবে যদি এই ধরনের একটি উপাদান উপস্থিত থাকে।

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

একটি সেটিংস কার্যকলাপ যোগ করুন

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

একটি সেটিংস কার্যকলাপ ঘোষণা

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

<application>
    ...
    <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>
    ...
</application>

আপনার সেটিংস কার্যকলাপ বাস্তবায়ন

যখন একজন ব্যবহারকারী আপনার অ্যাপ লঞ্চ করেন, তখন Android Automotive OS আপনার ঘোষিত সেটিংস কার্যকলাপ সনাক্ত করে এবং একটি আইকনের মতো একটি সামর্থ্য প্রদর্শন করে। ব্যবহারকারী ক্রিয়াকলাপে নেভিগেট করতে তাদের গাড়ির ডিসপ্লে ব্যবহার করে এই সামর্থ্যটি ট্যাপ বা নির্বাচন করতে পারেন। Android Automotive OS ACTION_APPLICATION_PREFERENCES ইন্টেন্ট পাঠায় যা আপনার অ্যাপকে আপনার সেটিংস কার্যকলাপ শুরু করতে বলে।

এই বিভাগের বাকি অংশটি দেখায় কিভাবে আপনি আপনার অ্যাপের জন্য একটি সেটিংস কার্যকলাপ বাস্তবায়ন করতে ইউনিভার্সাল অ্যান্ড্রয়েড মিউজিক প্লেয়ার (ইউএএমপি) নমুনা অ্যাপ থেকে কোড গ্রহণ করতে পারেন।

শুরু করতে, নমুনা কোড ডাউনলোড করুন:

# Clone the UAMP repository
git clone https://github.com/android/uamp.git

# Fetch the appropriate pull request to your local repository
git fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME

# Switch to the new branch
git checkout NEW_LOCAL_BRANCH_NAME

আপনার কার্যকলাপ বাস্তবায়ন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার স্বয়ংচালিত মডিউলে automotive/automotive-lib ফোল্ডারটি অনুলিপি করুন।
  2. automotive/src/main/res/xml/preferences.xml এর মত একটি পছন্দের গাছ সংজ্ঞায়িত করুন।
  3. একটি PreferenceFragmentCompat প্রয়োগ করুন যা আপনার সেটিংস কার্যকলাপ প্রদর্শন করে। আরও তথ্যের জন্য UAMP-এ SettingsFragment.kt এবং SettingsActivity.kt ফাইল এবং Android সেটিংস গাইড দেখুন।

আপনি আপনার সেটিংস কার্যকলাপ বাস্তবায়ন করার সময়, পছন্দ গ্রন্থাগারের কিছু উপাদান ব্যবহার করার জন্য এই সেরা অনুশীলনগুলি বিবেচনা করুন:

  • আপনার সেটিংস ক্রিয়াকলাপে মূল দৃশ্যের নীচে গভীরতার দুটি স্তরের বেশি না রাখুন৷
  • একটি DropDownPreference ব্যবহার করবেন না। পরিবর্তে একটি ListPreference ব্যবহার করুন।
  • সাংগঠনিক উপাদান:
    • PreferenceScreen
      • এটি আপনার পছন্দের গাছের শীর্ষ স্তর হতে হবে।
    • PreferenceCategory
      • Preference বস্তুকে একসাথে গোষ্ঠী করতে ব্যবহৃত হয়।
      • একটি title অন্তর্ভুক্ত করুন।
  • নিম্নলিখিত সমস্ত উপাদানগুলিতে একটি key এবং title অন্তর্ভুক্ত করুন। আপনি একটি summary , একটি icon বা উভয়ই অন্তর্ভুক্ত করতে পারেন:
    • Preference
      • আপনার PreferenceFragmentCompat বাস্তবায়নের onPreferenceTreeClick() কলব্যাকে যুক্তিটি কাস্টমাইজ করুন।
    • CheckBoxPreference
      • শর্তসাপেক্ষ পাঠ্যের জন্য summary পরিবর্তে summaryOn বা summaryOff থাকতে পারে।
    • SwitchPreference
      • শর্তসাপেক্ষ পাঠ্যের জন্য summary পরিবর্তে summaryOn বা summaryOff থাকতে পারে।
      • switchTextOn বা switchTextOff থাকতে পারে।
    • SeekBarPreference
      • একটি min , max এবং defaultValue অন্তর্ভুক্ত করুন।
    • EditTextPreference
      • dialogTitle , positiveButtonText এবং negativeButtonText অন্তর্ভুক্ত করুন।
      • dialogMessage এবং/অথবা dialogLayoutResource থাকতে পারে।
    • com.example.android.uamp.automotive.lib.ListPreference
      • বেশিরভাগই ListPreference থেকে প্রাপ্ত।
      • Preference বস্তুর একক পছন্দের তালিকা প্রদর্শন করতে ব্যবহৃত হয়।
      • entries একটি অ্যারে এবং সংশ্লিষ্ট entryValues থাকতে হবে।
    • com.example.android.uamp.automotive.lib.MultiSelectListPreference
      • বেশিরভাগই MultiSelectListPreference থেকে প্রাপ্ত
      • Preference বস্তুর একাধিক পছন্দের তালিকা প্রদর্শন করতে ব্যবহৃত হয়।
      • entries একটি অ্যারে এবং সংশ্লিষ্ট entryValues থাকতে হবে।

একটি সাইন-ইন কার্যকলাপ যোগ করুন

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

অ্যাপ শুরুতে সাইন ইন করতে হবে

কোনো ব্যবহারকারী আপনার অ্যাপ ব্যবহার করার আগে সাইন ইন করতে চাইলে, আপনার মিডিয়া ব্রাউজার পরিষেবাকে অবশ্যই নিম্নলিখিত জিনিসগুলি করতে হবে:

  1. আপনার পরিষেবার onLoadChildren() পদ্ধতিতে, sendResult() পদ্ধতি ব্যবহার করে null ফলাফল পাঠান।
  2. setState() পদ্ধতি ব্যবহার করে মিডিয়া সেশনের PlaybackStateCompat কে STATE_ERROR এ সেট করুন। এটি Android Automotive OS কে বলে যে ত্রুটিটি সমাধান না হওয়া পর্যন্ত অন্য কোন অপারেশন করা যাবে না।
  3. মিডিয়া সেশনের PlaybackStateCompat ত্রুটি কোড ERROR_CODE_AUTHENTICATION_EXPIRED এ সেট করুন। এটি Android Automotive OS কে বলে যে ব্যবহারকারীকে প্রমাণীকরণ করতে হবে।
  4. setErrorMessage() পদ্ধতি ব্যবহার করে মিডিয়া সেশনের PlaybackStateCompat ত্রুটি বার্তা সেট করুন। কারণ এই ত্রুটি বার্তাটি ব্যবহারকারী-মুখী, ব্যবহারকারীর বর্তমান লোকেলের জন্য এটি স্থানীয়করণ করুন।
  5. setExtras() পদ্ধতি ব্যবহার করে মিডিয়া সেশনের PlaybackStateCompat অতিরিক্ত সেট করুন। নিম্নলিখিত দুটি কী অন্তর্ভুক্ত করুন:

    • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL : একটি স্ট্রিং যা বোতামে প্রদর্শিত হয় যা সাইন-ইন কর্মপ্রবাহ শুরু করে। যেহেতু এই স্ট্রিংটি ব্যবহারকারী-মুখী, এটি ব্যবহারকারীর বর্তমান লোকেলের জন্য স্থানীয়করণ করুন।
    • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT : একটি PendingIntent যা ব্যবহারকারীকে আপনার সাইন-ইন কার্যকলাপে নির্দেশ করে যখন ব্যবহারকারী PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL দ্বারা উল্লেখ করা বোতামটি আলতো চাপে।

নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে আপনার অ্যাপ ব্যবহার করার আগে ব্যবহারকারীকে সাইন ইন করতে হবে:

কোটলিন

import androidx.media.utils.MediaConstants

val signInIntent = Intent(this, SignInActivity::class.java)
val signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
    signInIntent, 0)
val extras = Bundle().apply {
    putString(
        MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL,
        "Sign in"
    )
    putParcelable(
        MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT,
        signInActivityPendingIntent
    )
}

val playbackState = PlaybackStateCompat.Builder()
        .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
        .setErrorMessage(
            PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
            "Authentication required"
        )
        .setExtras(extras)
        .build()
mediaSession.setPlaybackState(playbackState)

জাভা

import androidx.media.utils.MediaConstants;

Intent signInIntent = new Intent(this, SignInActivity.class);
PendingIntent signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
    signInIntent, 0);
Bundle extras = new Bundle();
extras.putString(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL,
    "Sign in");
extras.putParcelable(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT,
    signInActivityPendingIntent);

PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder()
    .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
    .setErrorMessage(
            PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
            "Authentication required"
    )
    .setExtras(extras)
    .build();
mediaSession.setPlaybackState(playbackState);

ব্যবহারকারী সফলভাবে প্রমাণীকরণের পরে, STATE_ERROR ব্যতীত অন্য কোনো অবস্থায় PlaybackStateCompat সেট করুন, তারপর কার্যকলাপের finish() পদ্ধতিতে কল করে ব্যবহারকারীকে অ্যান্ড্রয়েড অটোমোটিভ ওএস-এ ফিরিয়ে নিয়ে যান।

আপনার সাইন-ইন কার্যকলাপ বাস্তবায়ন করুন

Google বিভিন্ন ধরনের পরিচয় টুল অফার করে যা আপনি ব্যবহারকারীদের তাদের গাড়িতে আপনার অ্যাপে সাইন ইন করতে সাহায্য করতে ব্যবহার করতে পারেন। কিছু টুল, যেমন ফায়ারবেস প্রমাণীকরণ, ফুল-স্ট্যাক টুলকিট প্রদান করে যা আপনাকে কাস্টমাইজড প্রমাণীকরণ অভিজ্ঞতা তৈরি করতে সাহায্য করতে পারে। ব্যবহারকারীদের জন্য নিরবিচ্ছিন্ন সাইন-ইন অভিজ্ঞতা তৈরি করতে আপনাকে সাহায্য করার জন্য অন্যান্য সরঞ্জামগুলি একজন ব্যবহারকারীর বিদ্যমান শংসাপত্র বা অন্যান্য প্রযুক্তির ব্যবহার করে।

নিম্নলিখিত সরঞ্জামগুলি আপনাকে ব্যবহারকারীদের জন্য একটি সহজ সাইন-ইন অভিজ্ঞতা তৈরি করতে সাহায্য করতে পারে যারা আগে অন্য ডিভাইসে সাইন ইন করেছেন:

  • ওয়ান ট্যাপ সাইন-ইন এবং সাইন-আপ: আপনি যদি ইতিমধ্যেই আপনার ফোন অ্যাপের মতো অন্যান্য ডিভাইসের জন্য ওয়ান ট্যাপ প্রয়োগ করে থাকেন, তাহলে বিদ্যমান ওয়ান ট্যাপ ব্যবহারকারীদের সমর্থন করার জন্য আপনার Android Automotive OS অ্যাপের জন্য এটি প্রয়োগ করুন।
  • Google সাইন-ইন: আপনি যদি ইতিমধ্যেই আপনার ফোন অ্যাপের মতো অন্যান্য ডিভাইসে Google সাইন-ইন প্রয়োগ করে থাকেন, তাহলে বিদ্যমান Google সাইন-ইন ব্যবহারকারীদের সমর্থন করার জন্য আপনার Android Automotive OS অ্যাপের জন্য Google সাইন-ইন প্রয়োগ করুন।
  • Google এর সাথে অটোফিল: ব্যবহারকারীরা যদি তাদের অন্যান্য অ্যান্ড্রয়েড ডিভাইসে Google-এর সাথে অটোফিল নির্বাচন করে থাকেন, তাহলে তাদের শংসাপত্রগুলি Google পাসওয়ার্ড ম্যানেজারে সংরক্ষিত হয়। যখন সেই ব্যবহারকারীরা আপনার Android Automotive OS অ্যাপে সাইন ইন করেন, তখন Google-এর সাথে অটোফিল প্রাসঙ্গিক সংরক্ষিত শংসাপত্রের পরামর্শ দেয়। Google-এর সাথে অটোফিল ব্যবহার করার জন্য কোনো অ্যাপ্লিকেশন ডেভেলপমেন্ট প্রচেষ্টার প্রয়োজন নেই। যাইহোক, অ্যাপ্লিকেশন বিকাশকারীরা তাদের অ্যাপ্লিকেশনগুলিকে আরও ভাল মানের ফলাফলের জন্য অপ্টিমাইজ করতে পারে৷ Android Automotive OS সহ Android 8.0 (API লেভেল 26) বা তার উপরে চলমান সমস্ত ডিভাইসে Google-এর সাথে অটোফিল সমর্থিত।

অ্যাকাউন্ট ম্যানেজার ব্যবহার করুন

Android Automotive OS অ্যাপ্লিকেশানগুলির প্রমাণীকরণ আছে তাদের অবশ্যই AccountManager ব্যবহার করতে হবে, নিম্নলিখিত কারণে:

  • আরও ভাল UX এবং অ্যাকাউন্ট পরিচালনার সহজতা: ব্যবহারকারীরা সাইন-ইন এবং সাইন-আউট সহ সিস্টেম সেটিংসের অ্যাকাউন্ট মেনু থেকে সহজেই তাদের সমস্ত অ্যাকাউন্ট পরিচালনা করতে পারে৷
  • "অতিথি" অভিজ্ঞতা: গাড়িগুলি ভাগ করা ডিভাইস, যার অর্থ OEMগুলি গাড়িতে "অতিথি" অভিজ্ঞতা সক্ষম করতে পারে, যেখানে অ্যাকাউন্টগুলি যোগ করা যায় না৷ AccountManager জন্য DISALLOW_MODIFY_ACCOUNTS ব্যবহার করে এই সীমাবদ্ধতা অর্জন করা হয়েছে।

অনুমতি

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

মিডিয়া হোস্ট ইঙ্গিত পড়ুন

আপনার মিডিয়া ব্রাউজার পরিষেবার সাথে সংযোগকারী সিস্টেম অ্যাপ্লিকেশনের (এর সংস্করণ সহ) উপর নির্ভর করে, আপনার অ্যাপ্লিকেশন নিম্নলিখিত অতিরিক্তগুলি পেতে পারে:

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

অ্যান্ড্রয়েড অটোমোটিভ ওএস-এ মিডিয়া অ্যাপের ত্রুটি মিডিয়া সেশনের PlaybackStateCompat মাধ্যমে যোগাযোগ করা হয়। সমস্ত ত্রুটির জন্য, PlaybackStateCompat কম্প্যাটে একটি উপযুক্ত ত্রুটি কোড এবং ত্রুটি বার্তা সেট করুন। এর ফলে UI-তে একটি Toast দেখা যায়।

যখন একটি ত্রুটি ঘটে কিন্তু প্লেব্যাক চালিয়ে যেতে পারে, তখন একটি অ-মারাত্মক ত্রুটি জারি করুন৷ উদাহরণস্বরূপ, একটি ব্যবহারকারী সাইন ইন করার আগে একটি অ্যাপে সঙ্গীত চালাতে সক্ষম হতে পারে, কিন্তু একটি গান এড়িয়ে যাওয়ার আগে তাদের অবশ্যই সাইন ইন করতে হবে৷ আপনি যখন একটি অ-মারাত্মক ত্রুটি ব্যবহার করেন, তখন সিস্টেমটি পরামর্শ দিতে পারে যে ব্যবহারকারী বর্তমান মিডিয়া আইটেমের জন্য প্লেব্যাকে বাধা না দিয়ে লগ ইন করুন৷

যখন আপনি একটি অ-মারাত্মক ত্রুটি ইস্যু করেন, তখন ত্রুটি কোড এবং ত্রুটির বার্তাটি বাদ দিয়ে বাকি PlaybackStateCompat যেমন- আছে তেমন সংরক্ষণ করুন। ব্যবহারকারী সাইন ইন করবেন কিনা সিদ্ধান্ত নেওয়ার সময় এই পদ্ধতিটি ব্যবহার করে বর্তমান মিডিয়া আইটেমের জন্য প্লেব্যাক চালিয়ে যেতে দেয়৷

যখন প্লেব্যাক সম্ভব না হয়, যেমন যখন কোন ইন্টারনেট সংযোগ না থাকে এবং কোন অফলাইন বিষয়বস্তু না থাকে, PlaybackStateCompat অবস্থা STATE_ERROR এ সেট করুন।

আপনার PlaybackStateCompat এর পরবর্তী আপডেটগুলিতে, একই ত্রুটির জন্য একাধিক সতর্কতা প্রদর্শন এড়াতে যেকোনো ত্রুটি কোড এবং ত্রুটি বার্তাগুলি সাফ করুন৷

যদি কোনো সময়ে আপনি একটি ব্রাউজ ট্রি লোড করতে অক্ষম হন-উদাহরণস্বরূপ, যদি আপনার প্রমাণীকরণের প্রয়োজন হয় এবং ব্যবহারকারী সাইন ইন না করেন-একটি খালি ব্রাউজ ট্রি পাঠান। এটি বোঝাতে, রুট মিডিয়া নোডের জন্য onLoadChildren() থেকে একটি শূন্য ফলাফল ফেরত দিন। যখন এটি ঘটে, সিস্টেমটি PlaybackStateCompat কম্প্যাটে সেট করা ত্রুটি বার্তা সহ একটি পূর্ণ-স্ক্রীন ত্রুটি প্রদর্শন করে।

কর্মযোগ্য ত্রুটি

যদি একটি ত্রুটি কার্যকর হয়, অতিরিক্তভাবে PlaybackStateCompat নিম্নলিখিত দুটি অতিরিক্ত সেট করুন:

  • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL : ত্রুটি সমাধান করতে ক্লিক করার জন্য বোতামের জন্য একটি লেবেল৷ যেহেতু এই স্ট্রিংটি ব্যবহারকারী-মুখী, এটি ব্যবহারকারীর বর্তমান লোকেলের জন্য স্থানীয়করণ করুন।
  • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT : PendingIntent যে বোতামটি ত্রুটির সমাধান করতে চালিত হয়, যেমন আপনার সাইন-ইন কার্যকলাপ চালু করে।

অ্যাকশনযোগ্য ত্রুটিগুলি একটি Dialog হিসাবে উপস্থিত হয় এবং গাড়িটি থামলেই ব্যবহারকারীরা সমাধান করতে পারে৷

পরীক্ষার ত্রুটির ক্ষেত্রে

যাচাই করুন যে আপনার অ্যাপ্লিকেশানটি সহ সমস্ত পরিস্থিতিতে ত্রুটিগুলিকে সুন্দরভাবে পরিচালনা করে:

  • আপনার পণ্যের বিভিন্ন স্তর: উদাহরণস্বরূপ, বিনামূল্যে বনাম প্রিমিয়াম বা সাইন ইন বনাম সাইন আউট
  • বিভিন্ন ড্রাইভের অবস্থা: উদাহরণস্বরূপ, পার্ক করা বনাম ড্রাইভিং
  • বিভিন্ন সংযোগ রাষ্ট্র: উদাহরণস্বরূপ, অনলাইন বনাম অফলাইন

অন্যান্য বিবেচনা

আপনার অ্যান্ড্রয়েড অটোমোটিভ ওএস অ্যাপ ডেভেলপ করার সময় এই অন্যান্য বিবেচনার কথা মাথায় রাখুন:

অফলাইন বিষয়বস্তু

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

আপনার অফলাইন সমর্থন কৌশল বিবেচনা করার সময় এখানে কয়েকটি বিষয় মনে রাখতে হবে:

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

ওয়েবভিউ সমর্থন

WebViews Android Automotive OS-এ সমর্থিত কিন্তু শুধুমাত্র আপনার সেটিংস এবং সাইন-ইন কার্যকলাপের জন্য অনুমোদিত। ওয়েবভিউ ব্যবহার করে এমন ক্রিয়াকলাপগুলির অবশ্যই WebView এর বাইরে একটি "ক্লোজ" বা "ব্যাক" সামর্থ্য থাকতে হবে।

WebViews-এর জন্য গ্রহণযোগ্য ব্যবহারের ক্ষেত্রে কিছু উদাহরণ এখানে দেওয়া হল:

  • আপনার সেটিংস কার্যকলাপে আপনার গোপনীয়তা নীতি, পরিষেবার শর্তাবলী বা অন্যান্য আইনি-সম্পর্কিত লিঙ্কগুলি প্রদর্শন করা।
  • আপনার সাইন-ইন কার্যকলাপে একটি ওয়েব-ভিত্তিক প্রবাহ।

একটি WebView ব্যবহার করার সময়, আপনি Javascript সক্রিয় করতে পারেন।

আপনার WebView সুরক্ষিত করুন

আপনার ওয়েবভিউ বৃহত্তর ইন্টারনেটে প্রবেশের বিন্দু নয় তা নিশ্চিত করার জন্য সম্ভাব্য সমস্ত সতর্কতা অবলম্বন করুন। কিভাবে loadUrl() কলে ব্যবহৃত URL-এ WebView লক করা যায় এবং পুনঃনির্দেশ প্রতিরোধ করা যায় তার উদাহরণের জন্য নিম্নলিখিত কোড স্নিপেটটি দেখুন। আমরা অত্যন্ত সুপারিশ করি যে আপনি যখন সম্ভব হয় তখন এই ধরনের সুরক্ষা প্রয়োগ করুন, যেমন আইনি-সম্পর্কিত লিঙ্কগুলি প্রদর্শন করার সময়।

কোটলিন

override fun shouldOverrideUrlLoading(webView: WebView,
                             webResourceRequest: WebResourceRequest): Boolean {
  val originalUri: Uri = Uri.parse(webView.originalUrl)
  // Check for allowed URLs
  if (originalUri.equals(Uri.parse(BLANK_URL))
      || originalUri.equals(webResourceRequest.url)) {
    return false
  }
  if (webResourceRequest.isRedirect) {
    logger.w("Redirect detected, not following")
    return true
  }
  setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.url)
  logger.w(
    String.format(
      "Navigation prevented to %s original is %s", webResourceRequest.url, originalUri))
  return true
}

জাভা

@Override
public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
  Uri originalUri = Uri.parse(webView.getOriginalUrl());
  // Check for allowed URLs
  if (originalUri.equals(Uri.parse(BLANK_URL))
      || originalUri.equals(webResourceRequest.getUrl())) {
    return false;
  }
  if (webResourceRequest.isRedirect()) {
    logger.w("Redirect detected, not following");
    return true;
  }
  setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.getUrl());
  logger.w(
      String.format(
          "Navigation prevented to %s original is %s", webResourceRequest.getUrl(), originalUri));
  return true;
}

প্যাকেজের নাম

যেহেতু আপনি Android Automotive OS এর জন্য একটি পৃথক Android প্যাকেজ কিট (APK) বিতরণ করেন, তাই আপনি আপনার মোবাইল অ্যাপ থেকে প্যাকেজ নামটি পুনরায় ব্যবহার করতে পারেন বা একটি নতুন প্যাকেজ নাম তৈরি করতে পারেন৷ আপনি যদি একটি ভিন্ন প্যাকেজের নাম ব্যবহার করেন, আপনার অ্যাপে দুটি আলাদা প্লে স্টোর তালিকা রয়েছে। আপনি যদি আপনার বর্তমান প্যাকেজের নাম পুনরায় ব্যবহার করেন, আপনার অ্যাপের উভয় প্ল্যাটফর্মে একটি একক তালিকা রয়েছে।

এটি মূলত একটি ব্যবসায়িক সিদ্ধান্ত। উদাহরণস্বরূপ, যদি আপনার মোবাইল অ্যাপে একটি টিম কাজ করে এবং একটি পৃথক দল আপনার Android Automotive OS অ্যাপে কাজ করে, তাহলে আলাদা প্যাকেজের নাম রাখা এবং প্রতিটি দলকে নিজস্ব Play Store তালিকা পরিচালনা করতে দেওয়া বোধগম্য হতে পারে। উভয় পদ্ধতি ব্যবহার করার জন্য প্রয়োজনীয় প্রযুক্তিগত প্রচেষ্টার মধ্যে একটি বড় পার্থক্য নেই।

নিম্নলিখিত সারণীটি আপনার বর্তমান প্যাকেজের নাম রাখা এবং একটি নতুন প্যাকেজ নাম ব্যবহার করার মধ্যে কিছু অন্যান্য মূল পার্থক্যকে সংক্ষিপ্ত করে:

বৈশিষ্ট্য একই প্যাকেজের নাম নতুন প্যাকেজের নাম
দোকান তালিকা একক একাধিক
মিরর ইনস্টল হ্যাঁ: সেটআপ উইজার্ড চলাকালীন "দ্রুত অ্যাপ পুনরায় ইনস্টল করুন" না
প্লে স্টোর পর্যালোচনা প্রক্রিয়া রিভিউ ব্লক করা: যদি একটি APK এর জন্য রিভিউ ব্যর্থ হয়, তাহলে একই রিলিজে জমা দেওয়া অন্যান্য APK ব্লক করা হয় স্বতন্ত্র পর্যালোচনা
পরিসংখ্যান, মেট্রিক্স, এবং গুরুত্বপূর্ণ সম্মিলিত: আপনি স্বয়ংচালিত-নির্দিষ্ট ডেটার জন্য ফিল্টার করতে পারেন। আলাদা
ইনডেক্সিং এবং সার্চ র‍্যাঙ্কিং বর্তমান স্ট্যান্ডিং বন্ধ করুন কোন ক্যারিওভার নেই
অন্যান্য অ্যাপের সাথে একীভূত হচ্ছে সম্ভবত কোন পরিবর্তনের প্রয়োজন নেই, ধরে নিচ্ছি যে মিডিয়া কোড উভয় APK এর মধ্যে ভাগ করা হয়েছে Google সহকারীর সাথে ইউআরআই প্লেব্যাকের মতো সংশ্লিষ্ট অ্যাপ আপডেট করতে হতে পারে।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

Android Automotive OS সম্পর্কে প্রায়শই জিজ্ঞাসিত কিছু প্রশ্নের উত্তরের জন্য নিম্নলিখিত বিভাগগুলি দেখুন৷

হার্ডওয়্যার

আমার অ্যাপ কি মাইক্রোফোনে অ্যাক্সেস পেতে পারে?

Android 10 (API লেভেল 29) বা উচ্চতরকে লক্ষ্য করে এমন অ্যাপগুলির জন্য, শেয়ারিং অডিও ইনপুট ডকুমেন্টেশন দেখুন। API স্তর 29 এর আগে এটি সম্ভব নয়।

আমরা কোন গাড়ির APIগুলিতে অ্যাক্সেস পেতে পারি এবং কীভাবে?

আপনি সীমিত APIs যে OEM দ্বারা উন্মুক্ত করা হয়. আপনি কীভাবে এই APIগুলি অ্যাক্সেস করেন তা প্রমিত করার জন্য প্রক্রিয়াগুলি তৈরি করা হচ্ছে৷

অ্যাপগুলি CarPropertyManagerSetProperty() এবং GetProperty() ব্যবহার করে গাড়ির API অ্যাক্সেস করতে পারে। সমস্ত উপলব্ধ বৈশিষ্ট্যগুলির একটি তালিকা দেখতে উত্স কোড বা রেফারেন্স ডকুমেন্টেশন পড়ুন৷ যদি সম্পত্তিটি @SystemApi সাথে টীকা করা হয় তবে এটি প্রিলোড করা সিস্টেম অ্যাপের মধ্যে সীমাবদ্ধ।

কি ধরনের অডিও কোডেক সমর্থিত?

অ্যান্ড্রয়েড সিডিডি-তে অডিও কোডেক বিবরণ পড়ুন।

Widevine DRM সমর্থিত?

হ্যাঁ। ওয়াইডিভাইন ডিআরএম সমর্থিত।

উন্নয়ন এবং পরীক্ষা

তৃতীয় পক্ষের SDK এবং লাইব্রেরি ব্যবহার করার জন্য কোন বিধিনিষেধ বা সুপারিশ আছে?

তৃতীয় পক্ষের SDK এবং লাইব্রেরি ব্যবহার করার বিষয়ে আমাদের কোনো নির্দিষ্ট নির্দেশিকা নেই। আপনি যদি থার্ড-পার্টি SDK এবং লাইব্রেরি ব্যবহার করা বেছে নেন, তাহলেও গাড়ি অ্যাপের গুণমানের প্রয়োজনীয়তা মেনে চলার জন্য আপনি দায়ী।

আমি কি ফোরগ্রাউন্ড পরিষেবা ব্যবহার করতে পারি?

ফোরগ্রাউন্ড পরিষেবার জন্য একমাত্র অনুমোদিত ব্যবহারের ক্ষেত্রে অফলাইন ব্যবহারের জন্য সামগ্রী ডাউনলোড করা। যদি আপনার কাছে একটি ফোরগ্রাউন্ড পরিষেবার জন্য অন্য একটি ব্যবহার-কেস থাকে যার জন্য আপনি সমর্থন দেখতে চান, তাহলে Android Automotive OS আলোচনা গোষ্ঠী ব্যবহার করে আমাদের সাথে যোগাযোগ করুন৷

Android Automotive OS অ্যাপ প্রকাশ করা হচ্ছে

আমি কিভাবে Google Play Console ব্যবহার করে আমার Android Automotive OS অ্যাপ প্রকাশ করব?

অ্যাপ প্রকাশের প্রক্রিয়াটি একটি ফোন অ্যাপ প্রকাশ করার মতই, কিন্তু আপনি একটি ভিন্ন ফর্ম ফ্যাক্টর ব্যবহার করেন। Android Automotive OS ফর্ম ফ্যাক্টর ব্যবহার করার জন্য আপনার অ্যাপটি বেছে নিতে, এই ধাপগুলি অনুসরণ করুন:

  1. প্লে কনসোল খুলুন।
  2. আপনার অ্যাপ্লিকেশন নির্বাচন করুন.
  3. বাম মেনু থেকে, রিলিজ > সেটআপ > অ্যাডভান্সড সেটিংস > ফর্ম ফ্যাক্টর-এ ক্লিক করুন।
  4. ফর্ম ফ্যাক্টর যোগ করুন > Android Automotive OS এ ক্লিক করুন, তারপর প্লে কনসোলে নির্দেশাবলী অনুসরণ করুন।

অতিরিক্ত সম্পদ

Android Automotive OS সম্পর্কে আরও জানতে, নিম্নলিখিত অতিরিক্ত সংস্থানগুলি দেখুন৷

নমুনা

গাইড

ব্লগ

ভিডিও

একটি Android Automotive OS Media সমস্যা রিপোর্ট করুন

অ্যান্ড্রয়েড অটোমোটিভ ওএস-এর জন্য আপনার মিডিয়া অ্যাপ ডেভেলপ করার সময় আপনি যদি কোনও সমস্যার সম্মুখীন হন, আপনি Google ইস্যু ট্র্যাকার ব্যবহার করে রিপোর্ট করতে পারেন। ইস্যু টেমপ্লেটে অনুরোধ করা সমস্ত তথ্য পূরণ করতে ভুলবেন না।

একটি নতুন সমস্যা তৈরি করুন

একটি নতুন সমস্যা ফাইল করার আগে, এটি ইতিমধ্যেই সমস্যা তালিকায় রিপোর্ট করা আছে কিনা তা পরীক্ষা করে দেখুন। আপনি সাবস্ক্রাইব করতে পারেন এবং ট্র্যাকারে একটি সমস্যার জন্য তারকা ক্লিক করে সমস্যার জন্য ভোট দিতে পারেন। আরও তথ্যের জন্য, একটি ইস্যুতে সদস্যতা নেওয়া দেখুন।