تحديد ومراقبة حالة الإرساء ونوعه

يمكن إرساء الأجهزة التي تعمل بنظام التشغيل 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;