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

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