すずしんろぐ

読者です 読者をやめる 読者になる 読者になる

すずしんろぐ

人生大逆転を目指す、鈴木俊吾の成長日記

Android OS起動時にサービスを自動起動させる方法

プログラミング

こんにちは、すずしんです。

現在、あるAndroidアプリの開発をしていますが…。 そのアプリで、スマホ端末の起動時サービス自動起動させたくなりました。 そこで、その方法について簡単に調べました。 せっかくなので、この記事に備忘録として残しておきます。

OS起動時にサービスを自動起動させる方法

AndroidOSの起動時には、「android.intent.action.BOOT_COMPLETED」というイベントがブロードキャストされます。 なので、このイベントを受け取るレシーバーを作成して、そのレシーバーから対象のサービスを起動させてやれば良いです。 Intentのアクションとしては「Intent.ACTION_BOOT_COMPLETED」を受け取ります。

public class BootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            context.startService(new Intent(context, MyService.class));
        }
    }
}

また、マニフェストファイルにレシーバーとパーミッションの設定をします。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver
    android:name=".BootReceiver"
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

ちなみに、このandroid.intent.action.BOOT_COMPLETEDは外部SDカードがマウントされる前にブロードキャストされますので…。 もしアプリがSDカードにインストールされているとBroadcast Intentを受け取ることができません。 そのため、内部ストレージにアプリを保存するように設定します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="internalOnly"
    …>

ひとこと

簡単にまとめると、端末(OS)の起動時にサービスを自動起動させるには…。 BroadcastReceiverでIntent.ACTION_BOOT_COMPLETEDを受け取った時にstartService()をすれば良いようです。 分かってしまえばそれほど難しくは無さそうですね。 実際に機能を実装するときには、マニフェストファイルの設定を忘れないようにしないとですね。