Android:如何创建精确的重复闹钟?

问题描述 投票:0回答:0

我的应用基本上已经完成了,除了通知。我收到了工作正常和花花公子的通知,除了让它们准确和重复。这个奇异的部分花了我两天的时间来尝试修复但无济于事。

有两件事我想做但不知道怎么做;

  1. 如上所述,让准确的重复警报按预期运行。
  2. 让它在重启后按预期继续。

(如果使用广播接收器或类似的,请指定哪个文件的代码。由于这个问题,我按照类似帖子的说明撞了几次墙。)

提前谢谢你。 (以下是我当前的代码)


在 MainActivity.class(从 MaterialTimePicker 调用 scheduleNotification())

public void scheduleNotification(int hour, int minute) {
        Intent alarmIntent = new Intent(this, AlarmReceiverNotification.class);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);

        if (calendar.before(Calendar.getInstance())) {
            calendar.add(Calendar.DATE, 1);
        }
        triggerTime = calendar.getTimeInMillis();

        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_IMMUTABLE);
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, 24*3600*1000, pendingIntent);

        
        Log.v("Alarm", "Alarm set for " + hour + ":" + minute);
        logTimeUntilNotification();
    }

在AlarmReceiverNotification.class中

public class AlarmReceiverNotification extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        showNotification(context);
    }

    private void showNotification(Context context) {
        NotificationManager mNotificationManager
                = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.cancelAll();

        new NotificationCompat.Builder(context, "1")
                .setSmallIcon(R.drawable.ic_pooper_notif)
                .setContentTitle(context.getResources().getString(R.string.notificationTitle))
                .setContentText(context.getResources().getString(R.string.notificationContent))
                .setDefaults(NotificationCompat.DEFAULT_ALL)
                .setAutoCancel(true);
    }
}

AndroidManifest.xml 中的权限

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

期望发生的是每天重复的确切设定时间的通知,直到被覆盖。

比预定时间晚一个半小时通知实际结果

使用 setExact 准确调用通知但不重复的部分工作结果。

Target Api 最新 (33) 最低为 27

java android notifications alarmmanager
© www.soinside.com 2019 - 2024. All rights reserved.