Есть ли способ получить уведомление, когда пользователь отключает устройство?

Мне нужно знать, когда пользователь отключает свой телефон. Существуют ли какие-либо трансляции (или аналогичные), которые уведомляют о отключении телефона пользователя?

Ответ 1

Вы можете использовать ACTION_SHUTDOWN Intent, который транслируется, когда телефон собирается завершить работу. В документации указано:

Приложениям обычно не нужно обращаться с этим, так как операция переднего плана также приостанавливается.

Другими словами, если вы отвечаете на все события жизненного цикла для своей деятельности соответствующим образом, нет необходимости использовать это, если вы действительно не хотите делать что-то конкретное, связанное с отключением.

Тон ACTION_SHUTDOWN был введен в API Level 4, другими словами он будет отправлен только на телефоны под управлением Android 1.6 или более поздней версии.

Вы поймаете трансляцию с помощью BroadcastReceiver. Он будет выглядеть примерно так:

public class ShutdownReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //Insert code here
    }

}

Вам также понадобится запись в манифесте, как показано ниже:

<receiver android:name=".ShutdownReceiver">
  <intent-filter>
    <action android:name="android.intent.action.ACTION_SHUTDOWN" />
  </intent-filter>
</receiver>

В зависимости от того, что вы делаете, другим вариантом будет использование ACTION_BOOT_COMPLETED Intent, который отправляется при перезапуске телефона.

Ответ 2

В дополнение к ACTION_SHUTDOWN вы должны добавить android.intent.action.QUICKBOOT_POWEROFF в свой фильтр намерений.
ACTION_SHUTDOWN не всегда транслируется на некоторых устройствах HTC (например, Evo 4g).
Чтобы быть более конкретным, если вы выберете Restart, ACTION_SHUTDOWN будет транслироваться, но если вы выберете Power Off, вместо этого будет транслироваться QUICKBOOT_POWEROFF.

Ответ 3

Чтобы расширить то, что сказал Дейв Уэбб, является подходящим способом справиться с этим:

Вы можете переопределить функции жизненного цикла Android:

protected void onPause();
protected void onResume();

В большинстве сценариев их реализация должна быть достаточной и не потребует, чтобы вы специально обрабатывали события "выключения".

Там больше информации о веб-сайте Android и в ответе на этот вопрос жизненного цикла.