27 মার্চ, 2025 থেকে, আমরা AOSP তৈরি করতে এবং অবদান রাখতে aosp-main
এর পরিবর্তে android-latest-release
ব্যবহার করার পরামর্শ দিচ্ছি। আরও তথ্যের জন্য, AOSP-তে পরিবর্তনগুলি দেখুন।
একটি AppCard তৈরি করুন
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
একটি AppCard তৈরি করতে, একটি অ্যাপকে অবশ্যই ম্যানিফেস্টে একটি প্রদানকারী তৈরি করতে হবে যা AppCardContentProvider
প্রসারিত করে। AppCardContentProvider
AppCards তৈরির সুবিধার্থে অন্তর্নিহিত বিশদগুলিকে বিমূর্ত করে।
ম্যানিফেস্ট ঘোষণা
একটি AppCard তৈরি করতে, একটি অ্যাপকে অবশ্যই AppCardContentProvider
প্রসারিত করতে ম্যানিফেস্টে একটি প্রদানকারী তৈরি করতে হবে।
<provider android:name=".SimpleAppCardContentProvider"
android:authorities="com.example.appcard.sample.media"
android:permission="@string/host_permission"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.android.car.appcard.APP_CARD_PROVIDER" />
</intent-filter>
</provider>
প্রতি প্যাকেজ এবং এই বৈশিষ্ট্যগুলির সাথে শুধুমাত্র একটি প্রদানকারীকে সংজ্ঞায়িত করা যেতে পারে :
-
android:exported="true"
-
android:enabled="true"
android:permission="@string/host_permission"
বা,
@string/host_permission
অ্যাপকার্ড লাইব্রেরিতে বিদ্যমান এবং সিস্টেমের অ্যান্ড্রয়েড API সংস্করণের উপর নির্ভর করে একটি অনুমতি নির্ধারণ করে।
স্ট্রিং রিসোর্স ব্যবহার করা শুধুমাত্র গ্র্যাডল দিয়ে তৈরি করার সময় কাজ করে। Soong ব্যবহার করার সময়, উপযুক্ত রিসোর্স কোয়ালিফায়ার অনুযায়ী স্ট্রিং রিসোর্স মান সহ স্পষ্ট স্ট্রিং নির্দিষ্ট করুন।
( ডিফল্ট ) android:grantUriPermissions="false"
( ডিফল্ট ) android:forceUriPermissions="false"
অপ্রত্যাশিত ফলাফল এড়াতে, প্রদানকারীকে শুধুমাত্র android:authorities
এ একটি একক কর্তৃপক্ষকে সংজ্ঞায়িত করতে হবে।
একটি অ্যাকশন-ভিত্তিক অভিপ্রায় ফিল্টার ঘোষণা করুন, com.android.car.appcard.APP_CARD_PROVIDER
AppCardContentProvider প্রসারিত করুন
এই বিভাগে ওভাররাইড এবং সুরক্ষিত চূড়ান্ত পদ্ধতি বর্ণনা করে।
ওভাররাইড পদ্ধতি
val authority: String
android:authorities
manifest সম্পত্তিতে সংজ্ঞায়িত অথরিটি ফেরত দিতে এই পদ্ধতিটি ব্যবহার করুন। fun onCreate(): Boolean
এই পদ্ধতিটিকে অবশ্যই super.onCreate()
কল করতে হবে। কার্যকারিতা সেট আপ করতে এই পদ্ধতিটি ব্যবহার করুন যা একটি AppCard অনুরোধ করা হলে সেট আপ করা হলে সম্ভবত বিলম্ব হতে পারে। val appCardIds: List
সমর্থিত অ্যাপকার্ড আইডিগুলির তালিকা ফেরত দিতে এই পদ্ধতিটি ব্যবহার করুন। আমরা প্রতিটি আইডি ভার্বোজ করার পরামর্শ দিই কারণ এই স্ট্রিংটি ত্রুটিগুলি লগ করতে ব্যবহার করা হয়৷ fun onAppCardAdded(String, AppCardContext): AppCard
এই পদ্ধতিটি বলা হয় যখন একটি AppCard প্রথমবার দেখানো হয় এবং AppCard এবং AppCardContext
এর সাথে সম্পর্কিত আইডি প্রদান করে যা অ্যাপকার্ডটি কীভাবে প্রদর্শিত হয় তার ইঙ্গিত দেয়। একটি প্রদানকারী হিসাবে সমর্থিত AppCards দ্বারা প্রয়োজনীয় যেকোন কার্যকারিতা সেট আপ করতে এই পদ্ধতিটি ব্যবহার করুন৷ একবার এই ফাংশনটি কল করা হলে, প্রদত্ত আইডির সাথে সংশ্লিষ্ট অ্যাপকার্ডটি সক্রিয় বলে বিবেচিত হয়৷
fun onAppCardRemoved(String)
এই পদ্ধতিটি বলা হয় যখন অ্যাপকার্ডের কোনো অবশিষ্ট উদাহরণ ব্যবহারকারীকে দেখানো হয় না এবং সমস্ত পরিষ্কার করা হয়। যখন এই ফাংশনটি কল করা হয়, প্রদত্ত আইডির সাথে সম্পর্কিত AppCard নিষ্ক্রিয় বলে বিবেচিত হয়৷ fun onAppCardContextChanged(String, AppCardContext)
এই পদ্ধতিটি বলা হয় যখন সিস্টেম আপডেট করতে চায় কিভাবে একটি AppCard প্রদর্শিত হয় এবং একটি আপডেট করা AppCardContext
পাঠায়। সুরক্ষিত চূড়ান্ত পদ্ধতি
fun sendAppCardUpdate(AppCard)
একটি সক্রিয় AppCard-এর জন্য একটি আপডেট সারিবদ্ধ করতে এই পদ্ধতিটি চালু করুন। fun sendAppCardComponentUpdate(String, Component)
একটি সক্রিয় AppCard-এ একটি উপাদানের জন্য একটি আপডেট সারিবদ্ধ করতে এই পদ্ধতিটি ব্যবহার করুন। যদি প্রদত্ত উপাদানটি EnforceFastUpdateRate
দিয়ে ট্যাগ করা হয়, তাহলে আপডেটটি অবিলম্বে পাঠানো হয়। FAQ
নমুনা বাস্তবায়ন কোথায়?
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-06-12 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2025-06-12 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[],null,["# Create an AppCard\n\nTo create an AppCard, an app must create a provider in the manifest that extends\n`AppCardContentProvider`. The `AppCardContentProvider` abstracts away underlying\ndetails to facilitate the creation of AppCards.\n\nManifest declaration\n--------------------\n\nTo create an AppCard, an app must create a provider in the manifest to extend\n`AppCardContentProvider`. \n\n \u003cprovider android:name=\".SimpleAppCardContentProvider\"\n android:authorities=\"com.example.appcard.sample.media\"\n android:permission=\"@string/host_permission\"\n android:exported=\"true\"\n android:enabled=\"true\"\u003e\n \u003cintent-filter\u003e\n \u003caction android:name=\"com.android.car.appcard.APP_CARD_PROVIDER\" /\u003e\n \u003c/intent-filter\u003e\n \u003c/provider\u003e\n\n**Only one provider can be defined per package** and with these properties:\n\n- `android:exported=\"true\"`\n- `android:enabled=\"true\"`\n- `android:permission=\"@string/host_permission\"`\n\n OR,\n - `android:readPermission=\"@string/host_permission\"`\n\n AND,\n\n `android:writePermission=\"@string/host_permission\"`\n- `@string/host_permission` exists in the AppCard library and defines a\n permission depending on the Android API version of the system.\n\n Using the string resource works only when building with Gradle. When using\n Soong, specify the explicit string with the string resource value according\n to the appropriate resource qualifier.\n- (*default* ) `android:grantUriPermissions=\"false\"`\n\n- (*default* ) `android:forceUriPermissions=\"false\"`\n\n To avoid unexpected results, it's required that the provider define a single\n authority **only** in `android:authorities`.\n- Declare an action-based intent filter,\n `com.android.car.appcard.APP_CARD_PROVIDER`\n\nExtend AppCardContentProvider\n-----------------------------\n\nThis section describes **override** and **protected** final methods.\n\n### Override methods\n\n\u003cbr /\u003e\n\n`val authority: String` Use this method to return the authority defined in the `android:authorities` manifest property.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onCreate(): Boolean` This method must call `super.onCreate()`. Use this method to set up functionality that could potentially cause a delay if set up when an AppCard is requested.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`val appCardIds: List` Use this method to return the list of supported AppCard IDs. We recommend making each ID verbose since this string is used to log errors.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onAppCardAdded(String, AppCardContext): AppCard` This method is called when an AppCard is shown for the first time and provides the ID related to the AppCard and the `AppCardContext` that provide hints as to how the AppCard is displayed.\n\n\u003cbr /\u003e\n\nUse this method to set up any functionality required by the AppCards\nsupported as a provider. Once this function is called, the AppCard that\ncorresponds to the given ID is considered to be **active.**\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onAppCardRemoved(String)` This method is called when no remaining instances of the AppCard are shown to the user and handles all clean up. When this function is called, the AppCard that corresponds to the given ID is considered **inactive.**\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onAppCardContextChanged(String, AppCardContext)` This method is called when the system wants to update how an AppCard is displayed and sends an updated `AppCardContext`.\n\n\u003cbr /\u003e\n\n### Protected final methods\n\n\u003cbr /\u003e\n\n`fun sendAppCardUpdate(AppCard)` Invoke this method to queue an update for an active AppCard.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun sendAppCardComponentUpdate(String, Component)` Invoke this method to queue an update for a component in an active AppCard. If the given component is tagged with `EnforceFastUpdateRate`, then the update is sent immediately.\n\n\u003cbr /\u003e\n\nFAQ\n---\n\nWhere are the sample implementations?\n\n- [Calendar AppCard](https://android.googlesource.com/platform/packages/apps/Car/libs/+/refs/tags/ub-automotive-master-20250418/car-app-card-lib/sample-calendar-app/)\n- [Media AppCard](https://android.googlesource.com/platform/packages/apps/Car/libs/+/refs/tags/ub-automotive-master-20250418/car-app-card-lib/sample-media-app/)\n- [Weather AppCard](https://android.googlesource.com/platform/packages/apps/Car/libs/+/refs/tags/ub-automotive-master-20250418/car-app-card-lib/sample-weather-app/)"]]