日本Androidの会 京都支部の10月の勉強会が10月28日に開催されます。
参加希望の方は、下記の ATND からお申込ください!
現在、立ち見になりますが、数名ほど余裕があります。京都から Android アプリを発信しませんか?!
目覚まし時計のように、ある時刻になったら通知をしてくれるケースについて処理について説明します。
まず、起因に下になる Activity にて、AmarmManager に Intent を追加します。下記の例では、システム時間の15秒後に AlarmBroadcastReceiver が呼ばれます。
Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 15); Intent intent = new Intent(this,AlarmBroadcastReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(this,0,intent,0); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); Toast.makeText(this, "Alarm Start!", Toast.LENGTH_SHORT).show(); |
その AlarmBroadcastReceiver では、NotificationManager を使って、端末に通知を行います。
public class AlarmBroadcastReceiver extends BroadcastReceiver { /* (non-Javadoc) * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent) */ @Override public void onReceive(Context context, Intent intent) { NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.icon,context.getString(R.string.app_name),System.currentTimeMillis()); Intent _intent = new Intent(context.getApplicationContext(),MainActivity.class); PendingIntent pending = PendingIntent.getActivity(context, 0, _intent, 0); notification.setLatestEventInfo(context.getApplicationContext(),"通知タイトル","通知説明",pending); manager.notify(1, notification); Toast.makeText(context, "Alarm Received!", Toast.LENGTH_SHORT).show(); } } |
AlarmManager と NotificationManager を使う場合、AndroidManifest.xml にそれぞれを登録する必要があります。
<receiver android:name=".AlarmBroadcastReceiver" android:process=":remote" /> <service android:name="NotificationChangeService" /> |