Как мне запланировать будильник на определенные дни недели на Android? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть этот метод. Если я установлю будильник в течение дня, он будет работать нормально. Мне нужно запланировать будильник на определенные дни недели / месяца / года на 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 голосов
/ 10 сентября 2018

Вам необходимо:

  1. Использовать ConstraintLayout.

  2. Избегать жестко закодированных размеров макетов.

Чтобы обеспечить гибкость макета и адаптацию к разным размерам экрана, вы должны использовать "wrap_content" и "match_parent" для ширины и высоты большинства компонентов представления вместо жестко заданных размеров.

«wrap_content» указывает представлению установить его размер в соответствии с тем, что необходимо для размещения содержимого в этом представлении.

«match_parent» делает представление максимально расширенным в родительском представлении.

0 голосов
/ 10 сентября 2018

Вам необходимо добавить файл dimens.xml в папку res:

Enter image description here

0 голосов
/ 10 сентября 2018

Один макет, правильно разработанный, будет доступен на каждом устройстве, но это может выглядеть странно.

Правильнее всего сначала создать альбомную компоновку и провести тестирование на разных устройствах, таких как планшеты и смартфоны с низкой плотностью.

Затем перейдите к более конкретным разрешениям, например, к портретному 7-дюймовому планшету и ландшафтному 10,1-дюймовому планшету.

Там вы, должно быть, достигли практически всех необходимых вам экранов.

Если что-то работает хорошо на смартфоне и сосет на другом смартфоне, вы должны проверить, как устроен XML-макет вашей почты.

В любом случае, вы можете искать разрешение hdpi, если вам нужен более конкретный дизайн для устройств с низким разрешением.

...