<receiver
android:name=".AlarmReceiver"/>
class AlarmReceiver : BroadcastReceiver() {
companion object {
const val TAG = "AlarmReceiver"
const val NOTIFICATION_ID = 0
const val PRIMARY_CHANNEL_ID = "primary_notification_channel"
}
lateinit var notificationManager: NotificationManager
override fun onReceive(context: Context, intent: Intent) {
Log.d(TAG, "Received intent : $intent")
notificationManager = context.getSystemService(
Context.NOTIFICATION_SERVICE) as NotificationManager
createNotificationChannel()
deliverNotification(context)
}
private fun deliverNotification(context: Context) {
val contentIntent = Intent(context, MainActivity::class.java)
val contentPendingIntent = PendingIntent.getActivity(
context,
NOTIFICATION_ID,
contentIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val builder =
NotificationCompat.Builder(context, PRIMARY_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle("Alert")
.setContentText("This is repeating alarm")
.setContentIntent(contentPendingIntent)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true)
.setDefaults(NotificationCompat.DEFAULT_ALL)
notificationManager.notify(NOTIFICATION_ID, builder.build())
}
fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationChannel = NotificationChannel(
PRIMARY_CHANNEL_ID,
"Stand up notification",
NotificationManager.IMPORTANCE_HIGH
)
notificationChannel.enableLights(true)
notificationChannel.lightColor = Color.RED
notificationChannel.enableVibration(true)
notificationChannel.description = "AlarmManager Tests"
notificationManager.createNotificationChannel(
notificationChannel)
}
}
}
class MainActivity : AppCompatActivity() {
private val TAG = MainActivity::class.java.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
val intent = Intent(this, AlarmReceiver::class.java) // 1
val pendingIntent = PendingIntent.getBroadcast( // 2
this,
AlarmReceiver.NOTIFICATION_ID,
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
)
val start = findViewById<Button>(R.id.start)
start.setOnClickListener {
Log.d(TAG, "start")
val repeatInterval: Long = AlarmManager.INTERVAL_FIFTEEN_MINUTES
val triggerTime = (SystemClock.elapsedRealtime() // 1
+ repeatInterval)
alarmManager.setInexactRepeating( // 2
AlarmManager.ELAPSED_REALTIME_WAKEUP,
triggerTime, repeatInterval,
pendingIntent)
Toast.makeText(this, "start", Toast.LENGTH_SHORT).show()
}
val end = findViewById<Button>(R.id.end)
end.setOnClickListener {
alarmManager.cancel(pendingIntent)
Toast.makeText(this, "end", Toast.LENGTH_SHORT).show()
}
}
}
'Android(Kotlin)' 카테고리의 다른 글
Android App Inspector (1) | 2022.11.12 |
---|---|
Android Timber (0) | 2022.11.04 |
Android Shimmer (0) | 2022.10.22 |
Android ViewModel Context (0) | 2022.10.20 |
Android BOOT_COMPLETED (0) | 2022.10.20 |