Тревога не получает доступ к BroadcastReceiver - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть таймер для установки будильника

public class TimePickerFragment : DialogFragment, TimePickerDialog.IOnTimeSetListener
{
    public static readonly string TAG = "MyTimePickerFragment";
    Action<DateTime> timeSelectedHandler = delegate { };

    public static TimePickerFragment NewInstance(Action<DateTime> onTimeSelected)
    {
        TimePickerFragment frag = new TimePickerFragment();
        frag.timeSelectedHandler = onTimeSelected;
        return frag;
    }

    public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        DateTime currentTime = DateTime.Now;
        //bool is24HourFormat = DateFormat.Is24HourFormat(Activity);
        TimePickerDialog dialog = new TimePickerDialog
            (Activity, this, currentTime.Hour, currentTime.Minute, false);
        return dialog;
    }



    public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
    {
        DateTime currentTime = DateTime.Now;
        DateTime selectedTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, hourOfDay, minute, 0);
        Log.Debug(TAG, selectedTime.Ticks.ToString());

        timeSelectedHandler(selectedTime);
    }
}

и эта функция для установки будильника

 private void setAlarm(DateTime time)
        {
            Intent intent = new Intent(this, typeof(MyReceiver));
            PendingIntent pendingIntent = PendingIntent.GetBroadcast(this, RQS_1, intent, 0);
            AlarmManager alarmManager = (AlarmManager)GetSystemService(Context.AlarmService);
            alarmManager.Set(AlarmType.RtcWakeup, time.Ticks, pendingIntent);
            string timeSet = time.Ticks.ToString();
            Toast.MakeText(this, timeSet, ToastLength.Short).Show();

        }

Даже если набор будильников равен текущему времени,Вещательный приемник не называется.Я попытался проверить значения установленного времени и текущего времени, и даже если текущее время достигнет установленного времени, широковещательный приемник не вступит в силу

BroadcastReceiver

[BroadcastReceiver]
    public class MyReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            Toast.MakeText(context, "Time reached!", ToastLength.Short).Show();
        }
    }
}

Я пропустил разрешения или что-то еще?

ОБНОВЛЕНИЕ: Ответ благодаря sushihangover

public class TimePickerFragment : DialogFragment, TimePickerDialog.IOnTimeSetListener
    {
        public static readonly string TAG = "MyTimePickerFragment";
        Action<Calendar> timeSelectedHandler = delegate { };

        public static TimePickerFragment NewInstance(Action<Calendar> onTimeSelected)
        {
            TimePickerFragment frag = new TimePickerFragment();
            frag.timeSelectedHandler = onTimeSelected;
            return frag;
        }

        public override Dialog OnCreateDialog(Bundle savedInstanceState)
        {
            DateTime currentTime = DateTime.Now;
            //bool is24HourFormat = DateFormat.Is24HourFormat(Activity);
            TimePickerDialog dialog = new TimePickerDialog
                (Activity, this, currentTime.Hour, currentTime.Minute, false);
            return dialog;
        }

        public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
        {
            Calendar calNow = Calendar.Instance;
            Calendar calSet = (Calendar)calNow.Clone();
            calSet.Set(CalendarField.HourOfDay, hourOfDay);
            calSet.Set(CalendarField.Minute, minute);

            calSet.Set(CalendarField.Millisecond, 0);

            DateTime currentTime = DateTime.Now;
            DateTime selectedTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, hourOfDay, minute, 0);
            Log.Debug(TAG, selectedTime.Ticks.ToString());

            timeSelectedHandler(calSet);
        }
    }

1 Ответ

0 голосов
/ 30 декабря 2018

Вы используете тиков из DateTime .Net, а Android AlarmManager основан на Android / Linux Эпоха миллисекунд :

Просмотрите мои ответы на этих других SO, чтобы увидетьКак использовать системное время Android или календарь Android:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...