web-dev-qa-db-ja.com

ユーザーがデバイスの電源を切ったときに通知を受け取る方法はありますか?

ユーザーがスマートフォンの電源をいつオフにするかを知る必要があります。ユーザーの電話の電源がオフになったときに通知するブロードキャスト(または同様の)はありますか?

42
BenIOs

ACTION_SHUTDOWN Intent 電話がシャットダウンしようとしているときにブロードキャストされます。ドキュメントは言う:

フォアグラウンドアクティビティも一時停止されるため、通常はアプリでこれを処理する必要はありません。

つまり、アクティビティのすべてのライフサイクルイベントに適切に応答する場合、シャットダウンに関連する何かを本当に実行したい場合を除いて、これを使用する必要はありません。

ACTION_SHUTDOWNインテントはAPIレベル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 電話の再起動時に送信されます。

67
Dave Webb

ACTION_SHUTDOWNに加えて、Android.intent.action.QUICKBOOT_POWEROFFをインテントフィルターに追加する必要があります。
ACTION_SHUTDOWNは、一部のHTCデバイス(Evo 4gなど)で常にブロードキャストされるとは限りません。
具体的には、[再起動]を選択するとACTION_SHUTDOWNがブロードキャストされますが、[電源オフ]を選択するとQUICKBOOT_POWEROFFがブロードキャストされます。

20
Naliba

Dave Webbの発言をさらに詳しく説明するのが、これを処理する適切な方法です。

Android Activity Lifecycle functions

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

ほとんどのシナリオでは、これらを実装するだけで十分であり、特に「電源オフ」イベントを処理する必要はありません。

Android Webサイトこのライフサイクルの質問 への回答には、さらに多くの情報があります。

0
noelicus