Xamarin.Forms UWP - Запустите приложение при входе - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь запустить свое приложение, когда пользователь входит в Windows. У меня установлен соответствующий Extension (StartupTask) в Package.appxmanifest , и я могу заставить приложение запускаться при входе в Windows, как и ожидалось. Тем не менее, приложение падает после показа экрана-заставки в течение секунды или двух.

В моем файле App.xaml.cs я переопределил OnLaunched (вызывается, когда пользователь запускает приложение) и OnActivated (вызывается, когда система запускает приложение после входа в Windows) , Оба вызывают одну и ту же функцию для инициализации моего приложения; однако приложение аварийно завершает работу только тогда, когда оно инициализируется из функции OnActivated. При инициализации от OnLaunched он работает как положено. Вот соответствующий код от App.xaml.cs :

// Called when the user launches the app
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    // Calling InitializeApp here, the app launches without problem
    InitializeApp(e);
}

// Called when the system launches the app after Windows login
protected override void OnActivated(IActivatedEventArgs e)
{
    base.OnActivated(e);
    // Calling InitializeApp here will cause the app to crash
    InitializeApp((LaunchActivatedEventArgs)e);
}

// initialize the app
async void InitializeApp(LaunchActivatedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;

    // Do not repeat app initialization when the Window already has content,
    // just ensure that the window is active
    if (rootFrame == null)
    {
        // Create a Frame to act as the navigation context and navigate to the first page
        rootFrame = new Frame();
        rootFrame.NavigationFailed += OnNavigationFailed;

        var assembliesToInclude = new List<Assembly>()
        {
            typeof(CachedImage).GetTypeInfo().Assembly,
            typeof(CachedImageRenderer).GetTypeInfo().Assembly
        };
        Xamarin.Forms.Forms.Init(e, assembliesToInclude);

        // Place the frame in the current Window
        Window.Current.Content = rootFrame;
    }

    if (rootFrame.Content == null)
    {
        // When the navigation stack isn't restored navigate to the first page,
        // configuring the new page by passing required information as a navigation
        // parameter
        rootFrame.Navigate(typeof(MainPage), e.Arguments);
    }

    // Ensure the current window is active
    Window.Current.Activate();

    if (session == null)
    {
        // prevent the app from stopping when minimized
        session = new ExtendedExecutionSession();
        session.Reason = ExtendedExecutionReason.Unspecified;
        session.Revoked += (s, a) => { };
        var result = await session.RequestExtensionAsync();

        if (result == ExtendedExecutionResult.Denied)
            System.Diagnostics.Debug.WriteLine("EXTENDED EXECUTION DENIED");
    }
}

1 Ответ

0 голосов
/ 17 мая 2018

Проблема в том, что вы пытаетесь привести IActivatedEventArgs к LaunchActivatedEventArgs, но когда активация запуска происходит, тип на самом деле StartupTaskActivatedEventArgs.

К счастью, вам действительно нужно eпараметр только для Xamarin.Forms.Forms.Init, который фактически принимает IActivatedEventArgs, поэтому вы можете просто изменить параметр InitializeApp на IActivatedEventArgs и удалить приведение к LaunchActivatedEventArgs в OnActivated.

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