#AlarmManagerを使ったステータスバー通知の方法
AndroidManifest.xml
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- :remoteさせる必要はないみたいだが、googleのサンプルコードにこうなっていたので:remoteしている -->
<receiver
android:name=".receiver.AlarmReceiver"
android:process=":remote" >
</receiver>
<receiver android:name=".receiver.StateAlarmReceiver" >
<intent-filter>
<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" />
</intent-filter>
</receiver>
###セットの仕方
MainActivity.java
// AlarmManagerから通知を受け取るレシーバーを定義する
Intent intent = new Intent(context, AlarmReceiver.class);
// レシーバーで判断するため 適当でOK
intent.putExtra("intent_alarm_id_key", 1000);
PendingIntent sender = PendingIntent.getBroadcast(context, INTENT_ALARM_ID, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// 通知させたい時間をCalendarを使って定義する
Calendar calSet = Calendar.getInstance();
calSet.setTimeInMillis(System.currentTimeMillis());
calSet.setTimeZone(TimeZone.getDefault());
// 毎日17:30に通知を表示させる
calSet.set(Calendar.HOUR_OF_DAY, 17);
calSet.set(Calendar.MINUTE, 30);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// AlarmManager.RTC_WAKEUPで端末スリープ時に起動させるようにする
// 1回だけ通知の場合はalarmManager.set()を使う
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(),
// 一日毎にアラームを呼び出す
AlarmManager.INTERVAL_DAY, sender);
###アラーム通知を受け取るレシーバー
AlarmReceiver.java
@Override
public void onReceive(Context context, Intent intent) {
messageId = intent.getIntExtra("intent_alarm_id_key", 0);
// 通知をタップした時にMainActivityを立ち上げる
Intent intent = new Intent(context, MainActivity.class);
intent.setAction("intent_action");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, id, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// ステータスバー通知の大きなアイコン画像
Bitmap largeIcon = BitmapFactory.decodeResource(mContext.getResources(),
R.drawable.ic_launcher);
Builder builder = new Builder(mContext);
// ステータスバー通知タイトル
builder.setContentTitle(mContext.getString(R.string.msg_message_alarm_title));
// ステータスバー通知テキスト
builder.setContentText(mContext.getString(R.string.msg_message_alarm_content));
// ステータスバー通知アイコン
builder.setSmallIcon(R.drawable.icon_stat_notify);
builder.setLargeIcon(largeIcon);
// ステータスバーに通知される文字
builder.setTicker(mContext.getString(R.string.msg_message_alarm_ticker));
builder.setAutoCancel(true);
builder.setDefaults(Notification.DEFAULT_ALL);
// 音・LED・バイブレーション設定を端末にゆだねる
builder.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) mContext
.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(0, builder.build());
}