<< Android-Note
サービスを端末起動時に自動実行する方法
あるサービスをAndroid端末が起動したときにスタートアップのような形で自動実行したい場合はアプリケーションに対して通知を行うBroadcastReceiverクラスを使用します。
手順は次の通りです。
サービスクラスの例
自動実行させたいサービスとして次のようなクラスを作りました。
public class StartupService extends Service { @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.i("StartupService : ", "スタートアップサービスが起動"); } @Override public IBinder onBind(Intent intent) { return null; } }
独自のBroadcastReceiverクラスの作成
次にBroadcastReceiverクラスを拡張した次のようなクラスを作ります。
public class StartupReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("StartupReceiver : ", "スタートアップ起動開始"); Intent startupService = new Intent(context, StartupService.class); context.startService(startupService); } }
まだこの時点ではサービスを実行するだけの機能しかないので次に紹介するパーミッションの追加で起動時にこれが動くようにします。
パーミッションの追加
AndroidManifest.xmlに次のようにserviceとreceiver要素を追加します。
<service android:name="com.MyApp.myapp.StartupService" />
<receiver android:name="com.MyApp.myapp.StartupReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
action要素にBOOT_COMPLETEDを渡すことで端末起動時にレシーバークラスが動きサービスが実行されることになります。
この例では端末起動時ですが他にもシャットダウン時などにレシーバーを起動させることも可能です。
レシーバーを呼び出すことのできるアクションについてはIntentのレファレンスの「Standard Broadcast Actions」の項目を見てください。
© Kaz