しかし「常駐アプリを作りたい」など、起動時に特定のServiceを実行したいという場面が出てくると思うのでこのようなタイトルにしました。
BroadCast Intent
システムに存在するアプリケーション全てに対してIntentを投げるブロードキャストIntentというものがあります。
システムが発行するブロードキャストIntentには下記のようなものがあります。
Broadcast Intent
Intent名 内容
ACTION_AIRPLANE_MODE_CHANGED    機内モードが設定/解除された
ACTION_BATTERY_CHANGED  バッテリー残量が変化した
ACTION_BATTERY_LOW      バッテリー残量が非常に少なくなった
ACTION_BATTERY_OKAY     バッテリー残量が非常に少ない状態から復帰した
ACTION_BOOT_COMPLETED   システムの起動が完了した
ACTION_CAMERA_BUTTON    カメラボタンが押下された
ACTION_CLOSE_SYSTEM_DIALOGS     システムダイアログが閉じられた
ACTION_CONFIGURATION_CHANGED    ロケールなどシステムの設定が変更された
ACTION_DATE_CHANGE_ACTION       日付が変更された
ACTION_DEVICE_STORAGE_LOW       内蔵メモリが非常に少ない状態になった
ACTION_DEVICE_STORAGE_OK        内蔵メモリが非常に少ない状態から復帰した
ACTION_GTALK_SERVICE_CONNECTED  GoogleTalkのセッションが確立された
ACTION_GTALK_SERVICE_DISCONNECTED       GoogleTalkのセッションが閉じられた
ACTION_HEADSET_PLUG     ヘッドセットの抜き差しが行われた
ACTION_INPUT_METHOD_CHANGED     IMEが変更された
ACTION_POWER_CONNECTED  外部電源が接続された
ACTION_POWER_DISCONNECTED       外部電源が切断された
この表は一部ですので、詳細はhttp://developer.android.com/reference/android/content/Intent.htmlをご覧ください。
今回利用するのはシステムの起動完了時に発行されるandroid.intent.action.BOOT_COMPLETEDです。
ブロードキャストレシーバ
ブロードキャストインテントはブロードキャストレシーバ(BroadcastReceiver)で受信します。
BroadcastReceiverクラスを継承したクラスを用意します。そしてonReceiveメソッドをオーバーライドし、そこで起動時に行いたい処理を記述します。
下記では常駐させたいサービス○○Serviceを起動するIntentを発行しています。
public class StartupReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
            Intent serviceIntent = new Intent(context, ○○Service.class);
            context.startService(serviceIntent);
    }
}
インテントを受け取る許可
注意事項として、インテントを受け取るパーミッションの設定を忘れずにマニフェストファイルに記述する必要があります。合わせてIntentフィルターも設定します。
用意したレシーバ(今回はStartupReceiver)がandroid.intent.action.BOOT_COMPLETEDを受け取るということを明示する必要があります。applicationタグ内に記述します。
<receiver android:name=".StartupReceiver" 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>
0 件のコメント:
コメントを投稿