こんにちは。レモンティーです。
前回はServiceを普通に開始してみました
sawalemounity.hatenablog.com
今回はAlarmManagerでServiceを開始します。
知らない単語がでてきたら↓をどうぞ
sawalemounity.hatenablog.com
ではさっそくやっていきます。
Service作成
まず開始するサービスをつくります。
普通にクラスを追加してIntentServiceを継承します。
今回は↓。前回とかわりませんね。
[Service] public class TestService:IntentService { const int NOTIFICATION_ID = 9000; public TestService() : base("TestService") { } protected override void OnHandleIntent(Intent intent) { //処理 Notification.Builder notificationBuilder = new Notification.Builder(Android.App.Application.Context) .SetSmallIcon(Resource.Drawable.icon) .SetContentTitle("Test") .SetContentText("This is a test notification!"); var notificationManager = (NotificationManager)GetSystemService(NotificationService); notificationManager.Notify(NOTIFICATION_ID, notificationBuilder.Build()); } }
Intent作成
先ほどつくったサービスを渡してIntentをつくります。
今回、これ以降はDependencyServiceで呼ぶメソッドに書いています。
Intent intent = new Intent(Android.App.Application.Context, typeof(TestService));
PendingIntent作成
さっきのIntentを渡してPendingIntentをつくります。
PendingIntent pendingIntent = PendingIntent.GetService(Android.App.Application.Context, 0,intent,PendingIntentFlags.UpdateCurrent);
AlarmManagerを作成してセット
まず作成して…
AlarmManager alarmManager = (AlarmManager)Android.App.Application.Context.GetSystemService(Context.AlarmService);
発火する時間をつくります。↓だと20秒後です。
long fireTimeUtc = DateTimeOffset.UtcNow.AddMilliseconds(20 * 1000).ToUnixTimeMilliseconds();
で、セット
alarmManager.Set(AlarmType.RtcWakeup, fireTimeUtc, pendingIntent);
これで完了です。
ただし今回は簡単にするためにAPIごとの違いをスルーしています。
そのため実際には↓の内容に注意して
APIごとにセットするときのメソッドを変えるなどの
工夫が必要になります。(↓の最後に簡潔な例があります)
qiita.com
今回はこれでおしまいです。