我有这种方法。如果我在一天之内设置了闹钟,它就可以正常工作。我需要在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));
}
}
}
}
答案 0 :(得分:1)
您必须:
使用ConstraintLayout。
避免使用硬编码的布局尺寸。
为确保布局灵活并适应不同的屏幕尺寸,对于大多数视图组件的宽度和高度,应使用“ wrap_content”和“ match_parent”,而不是硬编码的尺寸。
“ wrap_content”告诉视图将其大小设置为适合该视图中内容的大小。
“ match_parent”使视图在父视图中尽可能扩大。
答案 1 :(得分:0)
在每台设备上都可以使用一种经过正确设计的布局,但这可能看起来很奇怪。
正确的做法是首先设计景观布局,然后在平板电脑和低密度智能手机等不同设备上进行测试。
然后选择更具体的分辨率,例如纵向7英寸平板电脑和横向10.1英寸平板电脑。
您必须已经达到所需的几乎所有屏幕。
如果某件东西在智能手机上运行良好,并且在另一部智能手机上无法正常工作,则必须检查邮件布局XML的设计方式。
无论如何,如果您需要针对低分辨率设备的更具体设计,则可能会寻求hdpi分辨率。
答案 2 :(得分:0)