Когда кнопка питания нажата, диспетчер питания отправит уведомление об изменении состояния. Вы можете запросить, чтобы PM отправил вам уведомление, позвонив по номеру RequestPowerNotifications Вы должны отправить дескриптор в очередь сообщений типа точка-точка (управляемая версия здесь ) который получит уведомление.
Для тех, кто не хочет писать весь клей, чтобы сделать эту работу, все это уже сделано для вас в классе SDM PowerManagement .
Также имейте в виду, что только если вы запросите уведомление, не означает, что ваше приложение получит уведомление до того, как произойдет изменение состояния. Например, в pwer down довольно часто приложение не увидит уведомление, и почти наверняка, даже если вы его увидите, у вас не будет времени на выполнение чего-либо до того, как фактически произойдет приостановка. Обычно ваш обработчик запускается, когда устройство возобновляет работу (за ним следует любой обработчик состояния возобновления).
Менеджер питания не ждет вас, он просто передает сообщение. Вы не можете использовать это для запуска кода перед выключением.