[独習android]ブート時にサービスを起動するには
デバイスブート時にサービスを常駐させる方法。
ブート完了のイベントを受け取るBroadcastReceiverのサブクラスを作って、イベントを受け取ったときにサービスを起動するという流れ。
AndroidManifest.xml
- BOOT_COMPLETED ブロードキャストインテントを受け取るように指定
http://developer.android.com/reference/android/content/Intent.html#ACTION_BOOT_COMPLETED - BOOT_COMPLETED を受け取る許可を指定する必要もあり
http://developer.android.com/reference/android/Manifest.permission.html#RECEIVE_BOOT_COMPLETED
... <!-- デバイスブート時のインテントを受け取る許可 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <service android:name=".MainService" /> <receiver android:name=".MainReceiver"> <intent-filter> <!-- デバイスブート時のインテントを受け取るレシーバ --> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> ... </application> ...
BroadcastReceiver
public class MainReceiver extends BroadcastReceiver { private final String TAG = "aZsleep"; @Override public void onReceive(Context context, Intent intent) { Log.v(TAG, "onReceive called"); // サービスを起動する(BOOT_COMPLETED時) context.startService(new Intent(context, MainService.class)); } }
- BroadcastReceiver.onReceive() | Android Developers
http://developer.android.com/reference/android/content/BroadcastReceiver.html#onReceive(android.content.Context,%20android.content.Intent) - Context.startService() | Android Developers
http://developer.android.com/reference/android/content/Context.html#startService(android.content.Intent)
関連情報
- 「android-dev」タグの付いたエントリ http://groundwalker.com/blog/tag/android-dev
- Android SDK関連の書籍 http://amzn.to/SS0jff
http://www.taosoftware.co.jp/blog/2009/01/android_16.html
am broadcast -a android.intent.action.BOOT_COMPLETED
とかするとインテントをシミュレートできるらしい。