تتيح شاشة Android الرئيسية، المتوفّرة على معظم الأجهزة التي تعمل بنظام التشغيل Android، للمستخدم تضمين تطبيقات مصغّرة (أو تطبيقات مصغّرة) للوصول سريعًا إلى المحتوى. إذا كنت بصدد إنشاء شاشة رئيسية بديلة أو
تطبيق مشابه، يمكنك أيضًا السماح للمستخدم بتضمين التطبيقات المصغّرة من خلال تنفيذ
AppWidgetHost
. ليس هذا هو الإجراء الذي تحتاج إليه معظم التطبيقات، ولكن إذا كنت بصدد إنشاء مضيف خاص بك، من المهم فهم الالتزامات التعاقدية التي يوافق عليها المضيف بشكل ضمني.
تركّز هذه الصفحة على المسؤوليات المعنيّة بتنفيذ
AppWidgetHost
مخصّص. للحصول على مثال محدّد على كيفية تنفيذ AppWidgetHost
،
اطّلِع على رمز المصدر لشاشة Android الرئيسية
LauncherAppWidgetHost
.
في ما يلي نظرة عامة على الفئات والمفاهيم الرئيسية المعنيّة بتنفيذ
AppWidgetHost
مخصّصة:
مضيف التطبيقات المصغّرة: يقدّم
AppWidgetHost
إمكانية التفاعل مع خدمة AppWidget للتطبيقات التي تضمّن التطبيقات المصغّرة في واجهة المستخدم. يجب أن يكون لدىAppWidgetHost
معرّف فريد ضمن حزمة المضيف. ويبقى هذا المعرّف محفوظًا في جميع استخدامات المضيف. يكون المعرّف عادةً قيمة برمجية ثابتة تحدّدها في تطبيقك.رقم تعريف التطبيق المصغّر: يتم تخصيص رقم تعريف فريد لكل نسخة افتراضية من التطبيق المصغّر في وقت الربط. راجِع
bindAppWidgetIdIfAllowed()
ولمزيد من التفاصيل، راجِع قسم ربط التطبيقات المصغّرة التالي. يحصل المضيف على المعرّف الفريد باستخدامallocateAppWidgetId()
. يظل هذا المعرّف محفوظًا طوال مدة عرض التطبيق المصغّر إلى أن يتم حذفه من المضيف. يجب أن تحافظ حزمة الاستضافة على أي حالة خاصة بالمضيف، مثل حجم القطعة وموقعها، وأن تكون مرتبطة بمعرّف قطعة التطبيق.عرض مضيف التطبيق المصغّر: يمكنك اعتبار
AppWidgetHostView
إطارًا يتم لف التطبيق المصغّر فيه كلما دعت الحاجة إلى عرضه. يتم ربط الأداة بـAppWidgetHostView
في كل مرة يضخّم فيها المضيف الأداة.- ينشئ النظام تلقائيًا
AppWidgetHostView
، ولكن يمكن للمضيف إنشاء فئة فرعية خاصة به منAppWidgetHostView
من خلال تمديدها. - اعتبارًا من الإصدار 12 من Android (المستوى 31 من واجهة برمجة التطبيقات)،
AppWidgetHostView
يقدّم طريقتَيsetColorResources()
وresetColorResources()
لمعالجة الألوان التي تم تحميلها ديناميكيًا. يتحمّل المضيف مسؤولية توفير الألوان لهذه الطرق.
- ينشئ النظام تلقائيًا
حِزمة الخيارات: يستخدم
AppWidgetHost
حِزمة الخيارات ل إرسال معلومات إلىAppWidgetProvider
حول كيفية عرض التطبيق المصغّر، على سبيل المثال، قائمة نطاقات الحجم، وما إذا كان التطبيق المصغّر معروضًا على شاشة القفل أو الشاشة الرئيسية. تتيح هذه المعلومات لتطبيقAppWidgetProvider
تخصيص محتوى التطبيق المصغّر ومظهره استنادًا إلى كيفية عرضه ومكان عرضه. يمكنك استخدامupdateAppWidgetOptions()
وupdateAppWidgetSize()
لتعديل حِزمة التطبيق المصغّر. تؤدي كلتا الطريقتَين إلى بدءonAppWidgetOptionsChanged()
الاستدعاء إلىAppWidgetProvider
.
ربط التطبيقات المصغّرة
عندما يضيف مستخدم تطبيق مصغّر إلى مضيف، تحدث عملية تُعرف باسم الربط. يشير الربط
إلى ربط معرّف تطبيق مصغّر معيّن بخادم معيّن وAppWidgetProvider
معيّن.
تتيح واجهات برمجة التطبيقات لربط التطبيقات أيضًا للمضيف تقديم واجهة مستخدم مخصّصة لربط التطبيقات. لاستخدام هذه العملية، يجب أن يفصح تطبيقك عن الإذن
BIND_APPWIDGET
في بيان المضيف:
<uses-permission android:name="android.permission.BIND_APPWIDGET" />
ولكن هذه ليست سوى الخطوة الأولى. في وقت التشغيل، على المستخدم منح
إذنًا لتطبيقك صراحةً للسماح له بإضافة تطبيق مصغّر إلى المضيف. لاختبار ما إذا كان
تطبيقك لديه الإذن بإضافة التطبيق المصغّر، استخدِم الأسلوب
bindAppWidgetIdIfAllowed()
. إذا كانت القيمة التي يعرضها bindAppWidgetIdIfAllowed()
هي false
، يجب أن يعرض تطبيقك مربع حوار يطلب من المستخدم منح الإذن: "السماح" لإضافة التطبيق المصغّر الحالي، أو "السماح دائمًا" ليشمل ذلك جميع عمليات إضافة التطبيقات المصغّرة المستقبلية.
يقدّم هذا المقتطف مثالاً على كيفية عرض مربّع الحوار:
Kotlin
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_BIND).apply { putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName) // This is the options bundle described in the preceding section. putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options) } startActivityForResult(intent, REQUEST_BIND_APPWIDGET)
Java
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName); // This is the options bundle described in the preceding section. intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options); startActivityForResult(intent, REQUEST_BIND_APPWIDGET);
على المضيف التحقّق مما إذا كان التطبيق المصغّر الذي يضيفه المستخدم بحاجة إلى ضبط. للحصول على مزيد من المعلومات، يُرجى الاطّلاع على مقالة السماح للمستخدمين بضبط التطبيقات المصغرة.
مسؤوليات المضيف
يمكنك تحديد عدد من إعدادات الضبط للتطبيقات المصغّرة باستخدام ملف AppWidgetProviderInfo
البيانات الوصفية.
يمكنك استرداد خيارات الضبط هذه، التي يتم تناولها بمزيد من التفصيل في القسمين التاليين، من العنصر
AppWidgetProviderInfo
المرتبط بموفّر التطبيقات المصغّرة.
بغض النظر عن إصدار Android الذي تستهدفه، تتحمّل جميع المضيفين المسؤوليات التالية:
عند إضافة تطبيق مصغّر، خصِّص معرّف التطبيق المصغّر كما هو موضّح سابقًا. عند إزالة تطبيق مصغّر من المضيف، اتصل بـ
deleteAppWidgetId()
لإلغاء تخصيص رقم تعريف التطبيق المصغّر.عند إضافة تطبيق مصغّر، تحقّق مما إذا كان يجب بدء نشاط الضبط. عادةً ما يحتاج المضيف إلى بدء ملف نشاط إعدادات التطبيق المصغّر إذا كان متوفّرًا ولم يتم وضع علامة عليه كخيار اختياري من خلال تحديد علامتَي
configuration_optional
وreconfigurable
. اطّلِع على تعديل التطبيق المصغّر من نشاط الضبط للحصول على التفاصيل. هذه خطوة ضرورية للعديد من التطبيقات المصغّرة قبل أن يتم عرضها.تحدّد التطبيقات المصغّرة عرضًا وارتفاعًا تلقائيًا في
AppWidgetProviderInfo
البيانات الوصفية. يتم تحديد هذه القيم في الخلايا، بدءًا من Android 12، في حال تحديدtargetCellWidth
وtargetCellHeight
، أو في حال تحديدminWidth
وminHeight
فقط. اطّلِع على سمات ضبط حجم التطبيقات المصغّرة.تأكَّد من أنّ التطبيق المصغّر مُعدّ بحجم لا يقل عن هذا العدد من البكسل المستقل الكثافة. على سبيل المثال، ينسِّق العديد من المضيفين الرموز والتطبيقات المصغّرة في شبكة. في هذا السيناريو، يضيف المضيف تلقائيًا التطبيق المصغّر باستخدام الحد الأدنى لعدد الخلايا التي تفي بقيود
minWidth
وminHeight
.
بالإضافة إلى المتطلبات الواردة في القسم السابق، توفّر إصدارات معيّنة من المنصة ميزات تفرض مسؤوليات جديدة على المضيف.
تحديد النهج المتّبع استنادًا إلى إصدار Android المستهدَف
Android 12
يُجمِّع نظام التشغيل Android 12 (المستوى 31 من واجهة برمجة التطبيقات) List<SizeF>
إضافيًا يحتوي على قائمة
بالقِيَم المحتملة للحجم بالنقطة لكل ثانية التي يمكن أن تتّخذها مثيل الأداة المصغّرة في حِزمة الخيارات.
يعتمد عدد الأحجام المقدَّمة على طريقة تنفيذ المضيف. يوفّر المضيفون عادةً
حجمَين للهواتف، وهما الوضعان العمودي والأفقي، وأربعة أحجام
للأجهزة القابلة للطي.
هناك حدّ أقصى يبلغ MAX_INIT_VIEW_COUNT
(16) لعدد RemoteViews
المختلفة التي يمكن أن يوفّرها AppWidgetProvider
لRemoteViews
.
بما أنّ عناصر AppWidgetProvider
تربط عنصر RemoteViews
بكل مقاس في
List<SizeF>
، لا تقدِّم أكثر من MAX_INIT_VIEW_COUNT
مقاس.
يقدّم نظام التشغيل Android 12 أيضًا سمتَي
maxResizeWidth
و
maxResizeHeight
في ملف dps. ننصحك بأن لا تتجاوز أبعاد التطبيق المصغّر الذي يستخدم واحدة على الأقل من هذه
السمات الحدّ الأقصى الذي تحدّده السمات.
مصادر إضافية
- راجِع المستندات المرجعية في
Glance
.