システムの起動時に処理を行うにはブロードキャストレシーバでシステムから発行されるandroid.intent.action.BOOT_COMPLETEDを受信する。
1 2 3 4 5 6 7 8 |
public class MyBootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals(Intent.ACTION_BOOT_COMPLETED)){ //起動完了。処理を行う } } |
この時、AndroidManifest.xmlのパーミッションの書き方によってBOOT_COMPLETEDが受信できたりできなかったりする。
ネットでは以下の記述をよく見かける
1 2 3 4 5 6 7 8 9 |
<application> <receiver android:name=".MyBootCompletedReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application> |
ただし、ここでパーミッションの設定を行うと、Android2.3.4(実機)ではOKだったが、4.1.2(実機)では動かなかった。
以下のように記述することで両方で動作した。
1 2 3 4 5 6 7 8 9 |
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application> <receiver android:name=".MyBootCompletedReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application> |
起動時の他、
- DATE_CHANGED(日付変更時)
- TIMEZONE_CHANGED(タイムゾーン変更時)
- TIME_SET(時刻設定時)
- PACKAGE_REPLACED(パッケージアップデート時)
などがある。
※注意
パッケージのアップデートを検出するPACKAGE_REPLACEDを受信する場合は別のintent-filterとして設定する。→パッケージのアップデート時に処理を行う