如何在Android设备上安排一周中特定日期的警报?

时间:2018-09-10 10:51:29

标签: android scheduled-tasks alarm

我有这种方法。如果我在一天之内设置了闹钟,它就可以正常工作。我需要在Android设备上安排每周/每月/每年特定日期的警报。

public static void setAlarmFragment(int intervalDays, Context context, Calendar targetCal) {

    if (targetCal != null) {

        Intent intent = new Intent(context, PrescriptionAlarmActivity.class);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        int uniqueId = CommonUtils.generateRandomID();
        intent.putExtra("uniqueId", uniqueId);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, uniqueId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        int i = Build.VERSION.SDK_INT;
        if (alarmManager != null) {
            if (intervalDays > 0) {
                long customAlarmInterval = AlarmManager.INTERVAL_DAY * intervalDays;
                alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                        targetCal.getTimeInMillis(), customAlarmInterval, pendingIntent);
                Log.e("AlarmBroadcastReceiver", "Alarm set: " + CommonUtils.getAlarmTime(targetCal));
            }
            else {
                if (i < 19) {
                    alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
                }
                else if (i < 23) {
                    alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
                }
                else {
                    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
                }
                Log.e("AlarmBroadcastReceiver", "Alarm set: " + CommonUtils.getAlarmTime(targetCal));
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您必须:

  1. 使用ConstraintLayout。

  2. 避免使用硬编码的布局尺寸。

为确保布局灵活并适应不同的屏幕尺寸,对于大多数视图组件的宽度和高度,应使用“ wrap_content”和“ match_parent”,而不是硬编码的尺寸。

“ wrap_content”告诉视图将其大小设置为适合该视图中内容的大小。

“ match_parent”使视图在父视图中尽可能扩大。

答案 1 :(得分:0)

在每台设备上都可以使用一种经过正确设计的布局,但这可能看起来很奇怪。

正确的做法是首先设计景观布局,然后在平板电脑和低密度智能手机等不同设备上进行测试。

然后选择更具体的分辨率,例如纵向7英寸平板电脑和横向10.1英寸平板电脑。

您必须已经达到所需的几乎所有屏幕。

如果某件东西在智能手机上运行良好,并且在另一部智能手机上无法正常工作,则必须检查邮件布局XML的设计方式。

无论如何,如果您需要针对低分辨率设备的更具体设计,则可能会寻求hdpi分辨率。

答案 2 :(得分:0)

您需要在dimens.xml文件夹中添加一个res文件:

Enter image description here