ysk-san KT

技術系の情報をKTするために、まずは勉強

Androidにおける"BOOT_COMPLETED"と"LOCKED_BOOT_COMPLETED"と"Direct_BOOT"とは?/What are "BOOT_COMPLETED", "LOCKED_BOOT_COMPLETED" and "Direct_BOOT" in Android?

(English below)

要約:

Androidバイスの起動時やロック解除時に発生するいくつかのシステムイベントには、"BOOT_COMPLETED"、"LOCKED_BOOT_COMPLETED"、および"Direct_BOOT"という3つの主要なイベントがあります。この記事では、それぞれのイベントの違いについて説明し、それぞれのイベントをどのように実装するかを具体的なログとコード例を交えて解説します。

 

イベント1: BOOT_COMPLETED

Androidバイスが起動し、システムが完全に準備された後に発生するシステムイベントです。このイベントは、デバイスが完全に起動し、ユーザーがアプリを利用できる状態になったときに実行されるブロードキャストメッセージです。

 

実装例:

以下は、BOOT_COMPLETEDイベントを受け取るためのBroadcastReceiverを登録する方法の一例です。

AndroidManifest.xmlファイルに、以下のパーミッションとブロードキャストレシーバーの宣言を追加します。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:name=".BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

 

BroadcastReceiverクラスを作成し、onReceive()メソッド内で必要な処理を実装します。

public class BootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            // Describe the process after device activation here
            Log.d("BootCompletedReceiver", "Device has been activated.");
        }
    }
}

必要な処理をonReceive()メソッド内に追加し、デバイス起動後に実行したいコードを記述します。


ログ:


D/BootCompletedReceiver: Device has been activated.

 

イベント2: LOCKED_BOOT_COMPLETED

Androidバイスが起動した後、まだユーザーがロック解除していない状態で発生するシステムイベントです。このイベントは、デバイスのセキュリティ上の制約により、ユーザーの干渉なしに実行される必要があるタスクに使用されます。

 

実装例:

以下は、LOCKED_BOOT_COMPLETEDイベントを受け取るためのBroadcastReceiverを登録する方法の一例です。

AndroidManifest.xmlファイルに、以下のパーミッションとブロードキャストレシーバーの宣言を追加します。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECEIVE_LOCKED_BOOT_COMPLETED" />

<receiver android:name=".LockedBootCompletedReceiver"
    android:enabled="false"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
    </intent-filter>
</receiver>

BroadcastReceiverクラスを作成し、onReceive()メソッド内で必要な処理を実装します。

 

public class LockedBootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_LOCKED_BOOT_COMPLETED)) {
            // Describe the process after unlocking here
            Log.d("LockedBootCompletedReceiver", "Device is unlocked.");
        }
    }
}

必要な処理をonReceive()メソッド内に追加し、ロック解除後に実行したいコードを記述します。


ログ:


D/LockedBootCompletedReceiver: Device is unlocked.

 

イベント3: Direct_BOOT

"Direct_BOOT"は、デバイスが起動中の場合でも、特定のアプリケーションコンポーネントが実行される必要がある場合に使用される特殊なブロードキャストメッセージです。このイベントは、デバイスが起動中であっても、デバイスの一部機能やサービスが制限されている状態で発生します。

 

実装例:

以下は、Direct_BOOTイベントを受け取るためのBroadcastReceiverを登録する方法の一例です。

AndroidManifest.xmlファイルに、以下のパーミッションとブロードキャストレシーバーの宣言を追加します。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECEIVE_DIRECT_BOOT_COMPLETED" />

<receiver android:name=".DirectBootReceiver"
    android:directBootAware="true"
    android:enabled="true"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.DIRECT_BOOT_COMPLETED" />
    </intent-filter>
</receiver>

BroadcastReceiverクラスを作成し、onReceive()メソッド内で必要な処理を実装します。

 

public class DirectBootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_DIRECT_BOOT_COMPLETED)) {
            // Describe the process in Direct Boot state here
            Log.d("DirectBootReceiver", "Device is in Direct Boot state.");
        }
    }
}

必要な処理をonReceive()メソッド内に追加し、Direct Boot状態で実行したいコードを記述します。


ログ:


D/DirectBootReceiver: Device is in Direct Boot state.

 

おわり

このように、Androidバイスの起動やロック解除時に発生するシステムイベントには、"BOOT_COMPLETED"、"LOCKED_BOOT_COMPLETED"、および"Direct_BOOT"の3つの主要なイベントがあります。それぞれのイベントは、異なる状況で特定の処理を実行するために使用されます。正しいイベントを選択し、適切なBroadcastReceiverを実装することで、アプリケーションの動作を最適化できます。

 

====English translation====

Summary

There are three main system events that occur when an Android device is booted or unlocked: "BOOT_COMPLETED", "LOCKED_BOOT_COMPLETED", and "Direct_BOOT". This article describes the differences between each event and explains how to implement each event with specific logs and code examples.

Event 1: BOOT_COMPLETED

This is a system event that occurs after the Android device has booted and the system is fully prepared. This event is a broadcast message that is executed when the device is fully booted and the user is ready to use the application.

Example implementation: BOOT_COMPLETE

The following is an example of how to register a BroadcastReceiver to receive the BOOT_COMPLETED event.

Add the following permissions and broadcast receiver declaration to the AndroidManifest.xml file

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:name=".BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

 

Create a BroadcastReceiver class and implement the necessary processing in the onReceive() method.

public class BootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            // Describe the process after device activation here
            Log.d("BootCompletedReceiver", "Device has been activated.");
        }
    }
}

Add the necessary processing in the onReceive() method and write the code you want to execute after device activation.


Log:


D/BootCompletedReceiver: Device has been activated.

 

Event 2: LOCKED_BOOT_COMPLETED

This is a system event that occurs after the Android device has been booted but not yet unlocked by the user. This event is used for tasks that must be performed without user interference due to device security constraints.

 

Example Implementation:.

The following is an example of how to register a BroadcastReceiver to receive the LOCKED_BOOT_COMPLETED event.

Add the following permissions and broadcast receiver declaration to the AndroidManifest.xml file

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECEIVE_LOCKED_BOOT_COMPLETED" />

<receiver android:name=".LockedBootCompletedReceiver"
    android:enabled="false"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Create a BroadcastReceiver class and implement the necessary processing in the onReceive() method.

 

public class LockedBootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_LOCKED_BOOT_COMPLETED)) {
            // Describe the process after unlocking here
            Log.d("LockedBootCompletedReceiver", "Device is unlocked.");
        }
    }
}

Add the necessary processing in the onReceive() method and write the code you want to execute after unlocking.


Log:


D/LockedBootCompletedReceiver: Device is unlocked.

 

Event 3: Direct_BOOT

Direct_BOOT" is a special broadcast message used when certain application components need to be executed even when the device is booting. This event occurs when the device is booting but some device functions or services are restricted.

 

Example Implementation:.

The following is an example of how to register a BroadcastReceiver to receive the Direct_BOOT event.

Add the following permissions and BroadcastReceiver declaration to the AndroidManifest.xml file

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECEIVE_DIRECT_BOOT_COMPLETED" />

<receiver android:name=".DirectBootReceiver"
    android:directBootAware="true"
    android:enabled="true"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.DIRECT_BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Create a BroadcastReceiver class and implement the necessary processing in the onReceive() method.

 

public class DirectBootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_DIRECT_BOOT_COMPLETED)) {
            // Describe the process in Direct Boot state here
            Log.d("DirectBootReceiver", "Device is in Direct Boot state.");
        }
    }
}

Add the necessary processing in the onReceive() method and write the code you want to execute in the Direct Boot state.


Log:


D/DirectBootReceiver: Device is in Direct Boot state.

Conclusion

Thus, there are three main system events that occur when an Android device is booted or unlocked: "BOOT_COMPLETED", "LOCKED_BOOT_COMPLETED", and "Direct_BOOT". Each event is used to perform a specific operation in different situations. By selecting the correct event and implementing the appropriate BroadcastReceiver, you can optimize the behavior of your application.