اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
إنشاء بطاقة تطبيق
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
لإنشاء AppCard، يجب أن ينشئ التطبيق موفّرًا في البيان يوسّع AppCardContentProvider
. تخفي AppCardContentProvider
التفاصيل الأساسية لتسهيل إنشاء بطاقات AppCard.
بيان ملف البيان
لإنشاء 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
في مكتبة AppCard ويحدّد إذنًا استنادًا إلى إصدار Android API للنظام.
لا يمكن استخدام مورد السلسلة إلا عند الإنشاء باستخدام Gradle. عند استخدام Soong، حدِّد السلسلة الصريحة مع قيمة مورد السلسلة وفقًا لمؤهّل المورد المناسب.
(تلقائية) android:grantUriPermissions="false"
(تلقائية) android:forceUriPermissions="false"
لتجنُّب النتائج غير المتوقّعة، يجب أن يحدّد مقدّم الخدمة مرجعًا واحدًا فقط في android:authorities
.
تحديد فلتر أهداف مستند إلى إجراء،
com.android.car.appcard.APP_CARD_PROVIDER
Extend AppCardContentProvider
يوضّح هذا القسم الطريقتَين النهائيتَين override وprotected.
طُرق الإلغاء
val authority: String
استخدِم هذه الطريقة لعرض الجهة المحدّدة في سمة البيان android:authorities
.
fun onCreate(): Boolean
يجب أن تستدعي هذه الطريقة super.onCreate()
. استخدِم هذه الطريقة لإعداد وظيفة قد تتسبّب في حدوث تأخير إذا تم إعدادها عند طلب AppCard.
val appCardIds: List
استخدِم هذه الطريقة لعرض قائمة بمعرّفات AppCard المتوافقة. ننصحك بأن يكون كل معرّف تفصيليًا لأنّ هذه السلسلة تُستخدَم لتسجيل الأخطاء.
fun onAppCardAdded(String, AppCardContext): AppCard
يتم استدعاء هذا الإجراء عند عرض AppCard للمرة الأولى، ويوفّر المعرّف المرتبط بـ AppCard وAppCardContext
الذي يقدّم تلميحات حول كيفية عرض AppCard.
استخدِم هذه الطريقة لإعداد أي وظيفة تتطلّبها AppCards
المتوافقة كموفّر. بعد استدعاء هذه الدالة، سيتم اعتبار بطاقة AppCard التي تتوافق مع رقم التعريف المحدّد نشطة.
fun onAppCardRemoved(String)
يتم استدعاء هذا الإجراء عندما لا يتم عرض أي مثيلات متبقية من AppCard
للمستخدم، ويتعامل مع جميع عمليات التنظيف. عند استدعاء هذه الدالة، يتم اعتبار بطاقة AppCard التي تتوافق مع رقم التعريف المحدّد غير نشطة.
fun onAppCardContextChanged(String, AppCardContext)
يتم استدعاء هذه الطريقة عندما يريد النظام تعديل طريقة عرض AppCard وإرسال AppCardContext
معدَّل.
الطُرق النهائية المحمية
fun sendAppCardUpdate(AppCard)
استدعِ هذه الطريقة لوضع تحديث في قائمة الانتظار لبطاقة AppCard نشطة.
fun sendAppCardComponentUpdate(String, Component)
استدعِ هذه الطريقة لوضع تحديث في قائمة الانتظار لمكوِّن في AppCard نشطة. إذا تم وضع علامة EnforceFastUpdateRate
على المكوّن المحدّد، سيتم إرسال التعديل على الفور.
الأسئلة الشائعة
أين يمكن العثور على أمثلة على عمليات التنفيذ؟
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-09-05 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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-09-05 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["To 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\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\nThis section describes **override** and **protected** final methods.\n\nOverride 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\nProtected 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\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/)"]]