WP7/8 Вызов события тика DispatcherTimer в фоновом режиме/экране блокировки

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

В настоящее время моя проблема заключается в том, что события тиков на самом деле ничего не делают, пока приложение не активно. Как только пользователь возвращается в приложение, события тиков запускаются до такой степени, что они были бы в противном случае, но звуковой эффект (или что-либо еще) фактически не будет воспроизводиться, если приложение не будет активным или переключится на активное.

У меня есть в моем Page.xaml.cs:

PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;

Соответствующий код:

    void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        var remaining = this.EndTime - DateTime.Now;
        int remainingSeconds = (int)remaining.TotalSeconds;
        this.timeSpan.Value = TimeSpan.FromSeconds(remainingSeconds);

        if (remaining.TotalSeconds <= 0)
        {
            this.dispatcherTimer.Stop();
            button1.Visibility = Visibility.Collapsed;
            button6.Visibility = Visibility.Visible;
            this.EndTime = DateTime.MinValue;
            this.timeSpan.Value = TimeSpan.FromSeconds(0);
            BackgroundAudioPlayer.Instance.Play();
        }
    }

Что я могу сделать, чтобы события галочки запускались, когда приложение находится под экраном блокировки или, другими словами, неактивно?


person ictuateAnomaly    schedule 25.03.2014    source источник


Ответы (1)


Windows Phone имеет строгие ограничения на фоновую работу. Может быть, вам нужно разрешение на работу под локскрин?

http://developer.nokia.com/community/wiki/Run_Windows_Phone_application_under_lock_screen

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

person ad1Dima    schedule 25.03.2014
comment
Я сделал это, и теперь он работает на экране блокировки, но не когда приложение неактивно. Я предполагаю, что полная фоновая работа ограничена приложениями первой стороны. - person ictuateAnomaly; 26.03.2014
comment
DispatchTimer работает в потоке пользовательского интерфейса, поэтому System.Timers.Timer может быть лучшим вариантом (я не проверял это, но кажется вероятной причиной) - person Adam; 04.02.2016
comment
@AdamPedley работает с кнопками, поэтому он должен быть в потоке пользовательского интерфейса. - person ad1Dima; 15.02.2016