[Android Studio] AlarmManager

Darcy Daeseok YU ·2022년 6월 12일
0

안드로이드 스튜디오 알람 기능 구현 feat.Kotlin

알람 메니저를 사용한다.

플로우
알람 생성 -> 알람 리시버 -> 알람 화면 호출

알람 생성 메소드

fun reserveVideoAlarm(context: Context, file_path: String) {
            val alarmManger = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
            val intent = Intent(context, AlarmReceiver::class.java).apply {

                action = "AlarmCall"
                putExtra(Constants.VIDEO_PATH, file_path) //Constants.VIDEO_PATH "원하는 키값을 스트링으로 전달해주세요." 
            }

            val alarmPendingIntent =
                PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                alarmManger.setExactAndAllowWhileIdle(
                    AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 10000, // 밀리세컨드 후에 알람 호출됨. 
                    alarmPendingIntent
                )
            }
        }

밀리세컨드를 파라미터로 전달하여 알람 호출 시간을 설정해서 쓰자.
버튼 클릭리스너에 설정하면 10000 = 10초 후에 알람이 울린다. (예제는 하드코딩 테스트용)
(주의: 안드로이드 버전에 따라서 최소 알림 시간이 60초이고 10초를 설정해도 60초 후에 울린다. 에러가 아님)

알람 리시버를 구현한다.

package com.yuds.notificationtest

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.Log

class AlarmReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {


        when (intent.action) {

            "AlarmCall" -> {

                Log.d(
                    "AlarmReceiver",
                    "알람 호출 : ${intent.action}, 키네임: ${intent.getStringExtra(Constants.VIDEO_PATH)}"
                )

                var url: String = "http://www.yuds.com/yuds/alskjf"
                val externalIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
                externalIntent.addFlags(

                            Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
                )

                context.startActivity(externalIntent)

//                var intent = Intent(context, VideoAlarmAndNotifiActivity::class.java).apply {
//                putExtra(Constants.VIDEO_PATH, intent.getStringExtra(Constants.VIDEO_PATH))
//                }
//                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
//
//                context.startActivity(intent)


            }


        }
    }

}

알람 인텐트를 받고 받음과 동시에 알람 표시창을 다시 호출하여 스크린에 띄어 준다.

profile
React, React-Native https://darcyu83.netlify.app/

0개의 댓글