Alarmmanagerを使うと、数秒とか、数分後に実行されるプログラムが書けます。
で、
Intent _i = new Intent(getApplicationContext(), CalledActivity.class); PendingIntent _sender = PendingIntent.getBroadcast(Alarm.this, 0, _i, 0); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 10); AlarmManager _a = (AlarmManager)getSystemService(ALARM_SERVICE); _a.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), _sender);
とかで10秒後に_senderにReceiverクラスを用意しておくと、
public class CalledActivity extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { } }
うけとってくれて中の関数を実行してくれます。
多くのサイトで、説明がここまで。と言う状態ですが
「これで目覚ましとかも作れますか?→つくれません。」
と言う状況です。
ここで、カンタンに言うと、次のような事が発覚します。
「数時間後に設定をすると、設定した時間より遅れる。」
google playのレビューで目覚まし時計のレビューを見てると、「2~3分くらい遅れます。」
とか書かれている人がいます。そうなんですよ。alarmManagerが遅れる場合があります。
検索をしていたら、rokuta96のAndroidアプリ開発さんのとこに答えがありました。
「システムで時間を自動に設定をしている。」場合に再設定を。
と、言われてみれば、時間を「あと、何分」とか設定しているので、ここに注意をしたいとこだったのですが、
時間の再設定が入るたびに、プログラムも更新をしてあげる必要がありました。
また、電源オフ、アプリのアップデート時も、更新をしてあげる必要があるので、
<action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.DATE_CHANGED"/> <action android:name="android.intent.action.TIMEZONE_CHANGED"/> <action android:name="android.intent.action.TIME_SET"/> <action android:name="android.intent.action.PACKAGE_REPLACED"/>
として、上記のレシーバーで、アラームを再設定してあげればおそらくはアラームが設定時間になるはずです。
これで、AlaramManagerを使えます!お気をつけください。