يمكن إرساء الأجهزة التي تعمل بنظام التشغيل Android على أنواع مختلفة من قواعد الإرساء. وتشمل هذه القواعد إرساء للسيارات وقواعد إرساء للمنازل وقواعد إرساء للمركبات الرقمية أو التناظرية. تكون حالة قاعدة الإرساء مرتبطة عادةً بحالة الشحن، لأنّ العديد من قواعد الإرساء توفّر الطاقة للأجهزة المُثبَّتة فيها.
يؤثّر تطبيقك في معدّل تحديث الهاتف عندما يكون في حالة الإرساء. يمكنك زيادة معدّلات التحديث لتطبيق أخبار رياضية عندما يكون التطبيق في قاعدة الإرساء على الكمبيوتر المكتبي، أو إيقاف التحديثات تمامًا إذا كان الجهاز في وضع الإرساء في السيارة. وبالعكس، يمكنك الاستفادة إلى أقصى حد من التحديثات أثناء إرساء السيارة إذا كانت الخدمة التي تعمل في الخلفية تعمل على تعديل أحوال حركة المرور.
يتم أيضًا بث حالة الإرساء كرمز ثابت
Intent
،
يتيح لك الاستعلام عمّا إذا كان الجهاز متصلاً بقاعدة الإرساء ونوع قاعدة الإرساء في حال
توفّر.
تحديد حالة الإرساء الحالية
يتم تضمين تفاصيل حالة التثبيت كإضافة في
بث ثابت لمحاولة
ACTION_DOCK_EVENT
الإجراء. ولأنّه ثابت، يمكنك الاتصال بـ
registerReceiver()
،
مع إدخال null
كمستلِم البث. يوضّح المقتطف التالي كيفية إكمال هذه العملية:
Kotlin
val dockStatus: Intent? = IntentFilter(Intent.ACTION_DOCK_EVENT).let { ifilter -> context.registerReceiver(null, ifilter) }
Java
IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT); Intent dockStatus = context.registerReceiver(null, ifilter);
يمكنك استخراج حالة الإرساء الحالية من عنصر
EXTRA_DOCK_STATE
الإضافي:
Kotlin
val dockState: Int = dockStatus?.getIntExtra(EXTRA_DOCK_STATE, -1) ?: -1 val isDocked: Boolean = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED
Java
int dockState -1; if (dockStatus != null) { dockState = dockStatus.getIntExtra(EXTRA_DOCK_STATE, -1); } boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
تحديد نوع الإرساء الحالي
إذا تم إرساء جهاز على قاعدة الإرساء، يمكن توصيله بأي نوع من أنواع الإرساء الأربعة المختلفة التالية:
- سيارة
- مكتب
- مكتب منخفض السعر (عادي)
- مكتب متطور (رقمي)
لم يتم تقديم الخيارَين الأخيرَين إلا في المستوى 11 من واجهة برمجة تطبيقات Android، لذا يُنصح بالتحقق من أنواع المكاتب الثلاثة جميعها عندما تكون مهتمًا فقط بنوع قاعدة الإرساء بدلاً من أن تكون رقمية أو تناظرية على وجه التحديد:
Kotlin
val isCar: Boolean = dockState == EXTRA_DOCK_STATE_CAR val isDesk: Boolean = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK
Java
boolean isCar = dockState == EXTRA_DOCK_STATE_CAR; boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK;