Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

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

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

スマートフォンのホルダー装着状態がアップデート レートにどのように影響するかは、アプリによって異なります。スポーツ センター向けのアプリの場合、デバイスがデスクトップ ホルダーにあるときにはアップデート頻度を上げ、カーホルダーにあるときはアップデートを完全に無効にするよう指定できます。逆に、バックグラウンド サービスによって交通情報が更新される場合、車に装着しているときはアップデートを最大にすることを選択できます。

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

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

装着状態の詳細は、ACTION_DOCK_EVENT アクションのスティッキー ブロードキャストにエクストラとして含まれています。これはスティッキーであるため、BroadcastReceiver を登録する必要はありません。次のスニペットに示すように、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 = dockStatus.getIntExtra(EXTRA_DOCK_STATE, -1);
    boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
    

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

デバイスを装着する場合、次の 4 つのホルダータイプのいずれかで装着できます。

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

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

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;
    

装着状態やホルダータイプの変化を監視する

デバイスが装着されるか装着が解除されると、ACTION_DOCK_EVENT アクションがブロードキャストされます。デバイスの装着状態の変化を監視するには、次のスニペットに示すように、ブロードキャスト レシーバをアプリケーション マニフェストに登録します。

<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>

レシーバー実装内のホルダータイプと状態を抽出するには、前のステップで説明したのと同じ手法を使用します。