アラーム通知で、任意の音源(ジングルなどのmp3ファイル)をループ再生して、好きなタイミングで止めるというのを実装してみます。
基本的には、下記の記事を参考に、組み合わせるだけです。
アプリで音声ファイルをループ再生して、任意のタイミングで止める
Androidアプリでアラーム通知をする その1
起動して、その1分後にアラーム通知が来るようにセットするコード。
[MainActivity]
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //アラームを識別するコード、任意なので重複しない好きな数値を設定 int REQUEST_CODE = 140707; //1分後に通知を鳴らす Calendar cal = Calendar.getInstance(); cal.add(Calendar.MINUTE, 1); long init_alarm = cal.getTimeInMillis(); //指定の時間になったら起動するクラス Intent intent = new Intent(this, AlarmReceiver.class); intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); PendingIntent sender = PendingIntent.getBroadcast(this, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); //AlramManagerにPendingIntentを登録 AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, init_alarm, sender); }
[res]-[raw]フォルダの中に、「alarm.mp3」というファイルを入れている。
音量をマックスまで上げているが、これはサンプル用に記述しているだけで、普通の配布アプリではユーザーに無断で音量をあげたりしない。
アラームを鳴らす時間は「int timeout = 30*1000;」で30秒としている。
[AlarmReceiver]
public class AlarmReceiver extends BroadcastReceiver { // notifications @Override public void onReceive(Context context, Intent data) { Resources res = context.getResources(); Notification n = new Notification(); //アイコンの設定 n.icon = R.drawable.ic_launcher; //メッセージの設定 n.tickerText = "メッセージ1"; //通知を選択した時に自動的に通知が消えるための設定 n.flags = Notification.FLAG_AUTO_CANCEL; // 通知をタッチしたときに起動するActivity Intent i = new Intent(context, StopActivity.class); PendingIntent pi = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); // 上から通知バーを下してきたときに表示される文章をセット n.setLatestEventInfo(context, res.getString(R.string.app_name), "メッセージ2", pi); //デフォルトLED点滅パターンを設定 n.defaults |= Notification.DEFAULT_LIGHTS; // 設定したNotificationを通知する NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(1, n); Uri uri = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.alarm); //音量設定を取得 AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); int Vol = am.getStreamVolume(AudioManager.STREAM_MUSIC); //[res]-[raw]の音源を再生するときの音量 int max = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //[res]-[raw]の音源を再生するときの最大音量 System.out.println("Vol:" + Vol); System.out.println("max:" + max); //音量を上げる am.setStreamVolume(AudioManager.STREAM_MUSIC, max, 0); final MediaPlayer mp = MediaPlayer.create(context, uri); mp.setLooping(true); mp.start(); int timeout = 30*1000; Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { if (mp.isPlaying()) mp.stop(); } }, timeout); } }
[AndroidManifest.xml]
<receiver android:name="com.example.alarm_test.AlarmReceiver" android:process=":remote" />
コメントを残す