サービスを端末起動時に自動実行する方法

あるサービスをAndroid端末が起動したときにスタートアップのような形で自動実行したい場合はアプリケーションに対して通知を行うBroadcastReceiverクラスを使用します。

手順は次の通りです。

  1. サービスクラスの作成
  2. 独自のBroacastReceiverクラスの作成
  3. パーミッションの追加

サービスクラスの例

自動実行させたいサービスとして次のようなクラスを作りました。

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に次のようにservicereceiver要素を追加します。

<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」の項目を見てください。

関連項目
プライバシーポリシー