Listen to Phone Restarts on Android
When a phone is restarted the system broadcasts
ACTION_BOOT_COMPLETED to all the apps that have the RECEIVE_BOOT_COMPLETED permission. In this article, we will learn how to make our app listen to phone restarts.
1) Add permission to the
AndroidManifest.xml file.<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
2) Create a broadcast receiver and add
ACTION_BOOT_COMPLETED intent filter to receive the broadcasts.<receiver
android:name=".BootCompletedReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
public class BootCompletedReceiver extends BroadcastReceiver {
private static final String TAG = BootCompletedReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.i(TAG, "Boot Completed")
}
}
}
That's it, the
onReceive is called whenever the device is restarted. We can start the alarms or start a foreground service, JobIntentService, WorkManger for long running tasks. The lifespan of a broadcast receiver is 10 seconds, so, avoid any time consuming tasks in the onReceive method.
There is another broadcast similar to
ACTION_BOOT_COMPLETED that notifies the apps that the device is restarted, its called ACTION_LOCKED_BOOT_COMPLETED. There are few differences between both the broadcasts.
When
ACTION_LOCKED_BOOT_COMPLETED is broadcasted on 24+ versions, the device is started but the screen is still in the locked state and when ACTION_BOOT_COMPLETED is broadcasted, the device is started and the screen is unlocked by the user.
Until the screen is unlocked (i.e., when
ACTION_LOCKED_BOOT_COMPLETED is broadcasted and ACTION_BOOT_COMPLETED is yet to be broadcasted), the apps can only access device protected storage. So, take these limitations into consideration when listening for ACTION_BOOT_COMPLETED and ACTION_LOCKED_BOOT_COMPLETED.