تعیین و نظارت بر وضعیت و نوع اتصال

دستگاه‌های مجهز به Android را می‌توان در انواع مختلفی از پایه‌ها قرار داد. این شامل پایه اتصال در خودرو، پایه اتصال در خانه، و پایه‌های اتصال دیجیتال یا آنالوگ می‌شود. وضعیت پایه معمولاً ارتباط نزدیکی با وضعیت شارژ دارد، زیرا بسیاری از پایه‌ها برق دستگاه‌های متصل را تأمین می‌کنند.

برنامه شما بر نرخ به‌روزرسانی تلفن در حالت اتصال به پایه تأثیر می‌گذارد. می‌توانید دفعات به‌روزرسانی برنامه اخبار ورزشی را وقتی در پایه اتصال رومیزی است افزایش دهید، یا اگر دستگاه در پایه اتصال خودرو است، به‌روزرسانی‌ها را کاملاً غیرفعال کنید. برعکس، اگر سرویس پس‌زمینه‌ای شما درحال به‌روزرسانی وضعیت تردد باشد، می‌توانید به‌روزرسانی‌هایتان را درحین اتصال به پایه خودرو به حداکثر برسانید.

وضعیت پایه نیز به‌صورت چسبنده Intent پخش می‌شود، که به شما امکان می‌دهد پرس‌وجو کنید که آیا دستگاه در پایه قرار دارد و اگر چنین است، در چه نوع پایه‌ای قرار دارد.

تعیین وضعیت اتصال فعلی

جزئیات وضعیت پایه به‌عنوان یک ویژگی اضافی در پخش چسبنده ACTION_DOCK_EVENT گنجانده شده است. چون چسبنده است، می‌توانید registerReceiver() را فراخوانی کنید و null را به‌عنوان گیرنده رویداد ثبت‌شده ارسال کنید. قطعه کد زیر نحوه تکمیل این فرایند را نشان می‌دهد:

کاتلین

val dockStatus: Intent? = IntentFilter(Intent.ACTION_DOCK_EVENT).let { ifilter ->
    context.registerReceiver(null, ifilter)
}

جاوا

IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);

می‌توانید وضعیت اتصال فعلی را از EXTRA_DOCK_STATE extra استخراج کنید:

کاتلین

val dockState: Int = dockStatus?.getIntExtra(EXTRA_DOCK_STATE, -1) ?: -1
val isDocked: Boolean = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED

جاوا

int dockState -1;
if (dockStatus != null) {
  dockState = dockStatus.getIntExtra(EXTRA_DOCK_STATE, -1);
}
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;

تعیین نوع پایه فعلی

اگر دستگاهی روی پایه قرار گرفته باشد، می‌تواند روی هریک از چهار نوع پایه مختلف زیر قرار گرفته باشد:

  • خودرو
  • میز
  • میز ارزان‌قیمت (آنالوگ)
  • میز کار رده‌بالا (دیجیتال)

دو گزینه آخر فقط در سطح ۱۱ میانای برنامه‌سازی کاربردی Android معرفی شده‌اند، بنابراین بهتر است هر سه نوع میز را بررسی کنید، وقتی فقط به نوع پایه اتصال علاقه دارید، نه اینکه به‌طور خاص دیجیتال یا آنالوگ باشد:

کاتلین

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

جاوا

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;