装着状態とタイプを特定して監視する

Android デバイスは、さまざまな種類のホルダーに装着できます。車用ホルダー、家庭用ホルダー、デジタル ホルダー、アナログ ホルダーなどがあります。多くのホルダーはデバイスに電力を供給するため、通常、装着状態は充電状態に密接に関係しています。

アプリは、ホルダーの状態におけるスマートフォンのアップデート レートに影響します。スポーツ ニュース アプリがデスクトップ ホルダーに装着されている場合は、更新頻度を上げ、デバイスがカーホルダーに装着されている場合は更新を完全に無効にできます。逆に、バックグラウンド サービスが交通状況を更新している場合は、駐車中に更新を最大限に活用できます。

装着状態もスティッキー Intent としてブロードキャストされるため、デバイスが装着されているかどうか、装着されている場合はどの種類のホルダーかを照会できます。

現在の装着状態を特定する

装着状態の詳細は、ACTION_DOCK_EVENT アクションのスティッキー ブロードキャストにエクストラとして含まれています。これはスティッキーであるため、registerReceiver() を呼び出し、null をブロードキャスト レシーバとして渡すだけです。次のスニペットは、このプロセスを完了する方法を示しています。

KotlinJava
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 エクストラから抽出できます。

KotlinJava
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;

現在のホルダータイプを特定する

デバイスをホルダーに装着する場合は、次の 4 種類のホルダーのいずれかで装着できます。

  • デスク
  • ローエンド(アナログ)デスク
  • ハイエンド(デジタル)デスク

最後の 2 つのオプションは Android API レベル 11 でのみ導入されたため、ホルダーが具体的にデジタルかアナログかではなくホルダーのタイプのみがわかればいい場合は、3 つすべてを確認することをおすすめします。

KotlinJava
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;