サイト移転のお知らせ:http://techbooster.org/に移転しました

AlarmManagerで指定した時間に処理させる

12月 5, 2010   //   by kseto   //   アプリケーション  //  3 Comments

AndroidにはAlarmManagerというしくみがあります。
AlarmManagerを使うことで指定した時間に任意の処理をさせることができます。

詳しくは続きからご覧下さい。

AlarmManagerのメソッドは主に以下のようなものがあります。

void cancel(PendingIntent operation) 処理を削除
void set(int type, long triggerAtTime, PendingIntent operation) 任意の時間で実行する処理を登録
void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 一定間隔で実行する処理を登録

上記のように、任意の時間に任意の処理を登録するにはsetメソッドを使います。

setメソッドの第1引数には第2引数で指定する起動時間をどのように設定するかを指定します。
代表的なものに以下の定数が定義されています。

ELAPSED_REALTIME 電源ONからの経過時間で指定
ELAPSED_REALTIME_WAKEUP 電源ONからの経過時間で指定。スリープ状態のときは電源をONにしてくれる
RTC UTC時刻で指定
RTC_WAKEUP UTC時刻で指定。スリープ状態のときは電源をONにしてくれる

具体的なコードは以下のようになります。

Intent i = new Intent(getApplicationContext(), ReceivedActivity.class); // ReceivedActivityを呼び出すインテントを作成
PendingIntent sender = PendingIntent.getBroadcast(AlarmSample.this, 0, i, 0); // ブロードキャストを投げるPendingIntentの作成

Calendar calendar = Calendar.getInstance(); // Calendar取得
calendar.setTimeInMillis(System.currentTimeMillis()); // 現在時刻を取得
calendar.add(Calendar.SECOND, 15); // 現時刻より15秒後を設定

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); // AlramManager取得
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); // AlramManagerにPendingIntentを登録

ブロードキャストを投げるPendingIntentを作成しAlermManagerに登録しています。
(PendingIntentについては「AppWidgetの作成(2) + PendingIntent」で取り上げられています)
登録後、15秒が経過したらインテントで指定しているReceivedActivityが実行されます。

受け手となるReceivedActivityは呼び出されたときにToastを表示します。

public class ReceivedActivity extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent)
    {
        Toast.makeText(context, "called ReceivedActivity", Toast.LENGTH_SHORT).show();
    }
}

なお、AndroidManifestにBroadcastReceiverを有効にするための記述をAndroidManifestに記述しておく必要があります。

<receiver android:name=".ReceivedActivity" android:process=":remote" />

関連する記事:

Sponsored Link

3 Comments

  • [...] AlarmManagerで指定した時間に処理させる [...]

  • [...] 参考 Android実習マニュアル,  愚鈍人,  TechBooster void sendBroadcast(Intent intent) というものがあります。このメソッドは、引数で受け取ったインテントを送り出すという動作を するのですが、そのインテントがいかなるコンポーネントも起動しなかったとしても、例外は発 生させません。このメソッドの目的は、何らかの動作を引き起こすことではなくて、何らかの事 象を広範囲に告知することなのです。 動作の主体となる、アクティビティー、サービス、ブロードキャストレシーバーという 3 種類 のコンポーネントのうちで、ブロードキャストを受け取ることができるのは、ブロードキャスト レシーバーだけです。 ブロードキャストレシーバーは、サービスと同じように、画面を表示する機能を持っていませ ん。ただし、やはりサービスと同じように、トーストなどを使うことによってユーザーに何かを 知らせることは可能です。 Intent intent = new Intent(getApplicationContext(),sample.class); sendBroadcast(intent); public class ReceivedActivity extends BroadcastReceiver {     public void onReceive(Context context, Intent intent) {         Toast.makeText(context, “called ReceivedActivity”, Toast.LENGTH_SHORT).show();     } } AndroidManifestにBroadcastReceiverを有効にするための記述をAndroidManifestに記述しておく <receiver android:name=”.sample” android:process=”:remote” /> システムが発行するブロードキャストIntent http://developer.android.com/intl/ja/reference/android/content/Intent.html [...]

  • [...] 参考  サービスでの定期処理を行なうときのバッテリー消費について  AlarmManagerで指定した時間に処理させる AlarmManager 2 定期的な間隔で繰り返し処理をするプログラム Intent i = new Intent(getApplicationContext(), ReceivedActivity.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmSample.this, 0, i, 0); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 15); AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); public static void main – Androidで定期的に処理を実行する方法 [...]

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です