זיהוי וניטור מצב העגינה והסוג

אפשר לחבר מכשירים מבוססי 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;

קביעת סוג העגינה הנוכחי

אם מכשיר מחובר למטען, אפשר לחבר אותו לאחד מארבעת סוגי המטענים הבאים:

  • רכב
  • שולחן כתיבה
  • שולחן עבודה ברמה נמוכה (אנלוגי)
  • שולחן עבודה דיגיטלי (דיגיטלי) יוקרתי

שתי האפשרויות האחרונות מוצגות רק ב-Android API ברמה 11, כך שמומלץ לבדוק את כל שלושת הסוגים של שולחנות העבודה הווירטואליים אם אתם מתעניינים רק בסוג האביזר העגינה ולא בפורמט דיגיטלי או אנלוגי ספציפי:

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;