首页 > 解决方案 > 如何在kotlin中设置多个警报?

问题描述

所以我是编码新手,我正在为穆斯林祈祷时间制作一个应用程序,我希望在这些时间重复设置警报,我尝试了很多事情,但它不起作用!

我有一个祈祷课,如果有人想要,我会放上去的

如果您能帮助我为 1 次祈祷设置闹钟,我会更加感激,这样我就可以完成剩下的工作。

主要活动

    val latitude = 30.354802
    val longitude = 42.2461069
    val timezonoffset = 3.0
    val timeZoneId = "Middle East/Alowiqila"
    val prayTimes = PrayTimes()
    prayTimes.timeFormat = prayTimes.time12//
    prayTimes.calcMethod = prayTimes.makkah// Muslim World League (MWL)
    prayTimes.asrJuristic = prayTimes.hanafi// Shafii (standard)
    prayTimes.adjustHighLats = prayTimes.angleBased
    val offsets = intArrayOf(0, 0, 0, 0, 0, 0, 0) // {Fajr,Sunrise,Dhuhr,Asr,Sunset,Maghrib,Isha}
    prayTimes.tune(offsets)
    val cal = Calendar.getInstance(TimeZone.getTimeZone(timeZoneId))
    cal.time = Date()
    val times = prayTimes.getPrayerTimes(cal, latitude, longitude, timezonoffset)
    println("prayer times for Alowiqila")
    System.out.println("Fajr : " + times.get(0))
    System.out.println("Sunrise : " + times.get(1))
    System.out.println("Duhr : " + times.get(2))
    System.out.println("Asr : " + times.get(3))
    System.out.println("Sunset : " + times.get(4))
    System.out.println("Magrib : " + times.get(5))
    System.out.println("Isha : " + times.get(6))


   // I want the Alarm to be set to the code above it

    fun startAlarm(isNotification:Boolean, isRepeat:Boolean) {
        val manager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
        val myIntent= Intent(this@MainActivity, AlarmReceiver::class.java)
        val pendingIntent:PendingIntent
        // SET TIME HERE
        val calendar = Calendar.getInstance()
        calendar.set(Calendar.HOUR_OF_DAY, 15)
        calendar.set(Calendar.MINUTE, 20)
        pendingIntent = PendingIntent.getBroadcast(this, 0, myIntent, 0)
        if (!isRepeat)
            manager.set(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 3000, pendingIntent)
        else
            manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, AlarmManager.INTERVAL_DAY, pendingIntent)
    }

报警接收器.kt

这是我在女巫中的警报接收器我已经添加了通知

class AlarmReceiver : BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {
    val builder = NotificationCompat.Builder(context)

    val myIntent = Intent(context, MainActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(
        context,
        0,
        myIntent,
        FLAG_ONE_SHOT
    )

    builder.setAutoCancel(true)
        .setDefaults(Notification.DEFAULT_ALL)
        .setWhen(System.currentTimeMillis())
        .setContentTitle("موعد الاذان")
        .setContentIntent(pendingIntent)
        .setDefaults(Notification.DEFAULT_LIGHTS or Notification.DEFAULT_SOUND)
        .setContentInfo("Info")

    val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.notify(1, builder.build())
}

标签: androidkotlinandroid-alarms

解决方案


您必须将不同的 requestCode 放在待处理的意图中,每个警报管理器需要不同的 requestCode。在你的 mainActivity

pendingIntent = PendingIntent.getBroadcast(this, (0..2147483647).random(), myIntent, 0)

推荐阅读