Suspend Shutdown hooks
Decommission notice
February, 2026
- This service will be decommissioned on March 31, 2027.
- All services will be withdrawn following a 12 months deprecation period.
- There is no recommended migration path.
Introduction
The TomTom BRIDGE allows you to intervene when it is about to be suspended or shut down. It will
look for apps listening for the ACTION_REQUEST_CONFIRM_SUSPEND_SHUTDOWN intent and if one is
installed, control over the suspend/shutdown flow is handed over to this app. This can be useful for
situations where you do not want the device to suspend/shutdown because some process is not finished
or users first need to log out of your own systems, for example.
Make sure to use a priority higher than 5 for this intent-filter, to make sure your app will be called. The default handler uses priority 5 so to supersede it your priority must be higher. So your AndroidManifest.xml will contain this:
1<!-- Permissions needed -->2<uses-permission android:name="android.permission.DEVICE_POWER" />3<uses-permission android:name="android.permission.SHUTDOWN" />4...5<!-- Priority needed > 5 -->6<intent-filter android:priority="10" >s7 <action android:name="android.intent.action.ACTION_REQUEST_CONFIRM_SUSPEND_SHUTDOWN" />8 <category android:name="android.intent.category.DEFAULT" />9</intent-filter>
The intent comes with two integer extras: poweroff_state and poweroff_reason. The former indicates the state the system is trying to get to, 1 for a shutdown and 2 to be suspended, and the reason gives an indication why the device is trying to get to that state:
| Value | Reason |
|---|---|
| 0 | By user request, eg. the power button was pressed |
| 1 | Device administration policy |
| 2 | Screen timeout |
| 3 | Disconnected from power |
| 4 | Lid switch (from 17.6 onward) |
| 5 | Application request (from 17.6 onward) |
| 6 | HDMI (from 17.6 onward) |
| 7 | Sleep button (from 17.6 onward) |
Once you have decided to proceed with the suspend/shutdown it's the apps responsibility now to make that happen! These are the calls you can use:
1private void suspend() {2 try {3 finish()4 final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);5 pm.goToSleep(SystemClock.uptimeMillis());6 } catch (final SecurityException e) {7 Log.e(TAG, "SecurityException ", e);8 }9}1011private void shutdown() {12 try {13 finish();14 final Intent shutdownIntent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");15 startActivity(shutdownIntent);16 } catch (final SecurityException e) {17 Log.e(TAG, "SecurityException ", e);18 }19}
To prevent the suspend/shutdown from happening, the only thing you need to do is ignore it: don't suspend or request a shutdown from your app and nothing will happen.