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

אפשר לחבר מכשירים מבוססי 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, כך כדאי לבדוק את כל שלושת הסוגים של שולחנות העבודה הווירטואליים אם אתם מתעניינים רק בהם סוג ה-Dock ולא שהוא דיגיטלי או אנלוגי באופן ספציפי:

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;