Androidアプリでアラーム通知をする その1


Twitterアプリとかお知らせで画面の上のほうにピローンってきたりするじゃないですか。
あれ、正確にはpush通知でまた違うんですけど、アプリ内で時間をセットして同じように通知させることができます。
(push通知の実装のしかたはこちら Androidアプリでプッシュ通知を実装するとき

PendingIntentを登録する。
[MainActivity]

//アラームを識別するコード、任意なので重複しない好きな数値を設定
int REQUEST_CODE = 140625;

//通知を鳴らしたい時間をセットする
Calendar cal = Calendar.getInstance();
cal.set(y, m, d, 0, 0, 0);	//年、月、日、時、分、秒
cal.set(Calendar.MILLISECOND,0);	//ミリ秒

//ミリ秒で通知時間を設定する
long init_alarm = cal.getTimeInMillis();
System.out.println("REQUEST_CODE" + REQUEST_CODE + " -> init_alarm:" + init_alarm);

//指定の時間になったら起動するクラス
Intent intent = new Intent(this, AlarmReceiver.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
//普通のintentと同じように、KEYとの組み合わせで値を受け渡しできるよ
intent.putExtra("KEY", value);
//ブロードキャストを投げるPendingIntentの作成
PendingIntent sender = PendingIntent.getBroadcast(this, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

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

Activity内での呼び出しはこれでOKです。

次は設定した時間になったら起動するAlarmReceiverです。

public class AlarmReceiver extends BroadcastReceiver {
	// notifications
	@Override
	public void onReceive(Context context, Intent data) {
		//変数の受け取り
		int value = data.getIntExtra("KEY", 0);

		Resources res = context.getResources();

		Notification n = new Notification();
		n.icon = R.drawable.ic_launcher; // アイコンの設定
		// 通知されたときに通知バーに表示される文章
		String set_text = "メッセージ 受け取った変数:" + value;	//受け取ったvalueに応じて文章を変更したりなど、ご自由に
		n.tickerText = set_text; // メッセージの設定
		n.flags = Notification.FLAG_AUTO_CANCEL; // 通知を選択した時に自動的に通知が消えるための設定

		// 通常の着信音を選択する
		// Uri uri =
		// RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); //着信音
		// Uri uri =
		// RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
		// //通知音
		Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); // アラーム音
		n.sound = uri; // サウンド

		//通知をタッチしたときに起動するActivity
		Intent i = new Intent(context, SplashActivity.class);

		PendingIntent pi = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
		// 上から通知バーを下してきたときに表示される文章をセット
		n.setLatestEventInfo(context, res.getString(R.string.app_name), set_text, pi);

		long[] vibrate_ptn = { 0, 100, 300, 1000 }; // 独自バイブレーションパターン
		n.vibrate = vibrate_ptn; // 独自バイブレーションパターンを設定

		n.defaults |= Notification.DEFAULT_LIGHTS; // デフォルトLED点滅パターンを設定

		// NotificationManagerのインスタンス取得
		NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
		nm.notify(1, n); // 設定したNotificationを通知する
	}
}

最後に、Receiverをマニフェストファイルに登録します。
バイブ機能を使用するので、パーミッションも追加しましょう。
[AndroidManifest.xml]
パーミッション

<uses-permission android:name="android.permission.VIBRATE" />

applicationタグの中のどこかに記述

<receiver
    android:name="○○(プロジェクト名).activity.AlarmReceiver"
    android:process=":remote" />
カテゴリー: Android, Java, プログラム

コメントを残す

メールアドレスが公開されることはありません。