如何使用 Windows Template Studio 处理 uwp 应用程序 URI
How to handle uwp app Uri that using Windows Template Studio
根据 Microsoft 文档,您可以使用此代码处理应用程序 uri
protected override void OnActivated(IActivatedEventArgs args)
{
if (args.Kind == ActivationKind.Protocol)
{
ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
// TODO: Handle URI activation
// The received URI is eventArgs.Uri.AbsoluteUri
}
}
但那是从默认模板创建应用程序的时候。我的 UWP 项目是使用 Windows Template Studio 创建的,目前,我想放置该代码的位置现在是
protected override async void OnActivated(IActivatedEventArgs args)
{
await ActivationService.ActivateAsync(args);
}
导致这个..
public async Task ActivateAsync(object activationArgs)
{
if (IsInteractive(activationArgs))
{
// Initialize things like registering background task before the app is loaded
await InitializeAsync();
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (Window.Current.Content == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
Window.Current.Content = _shell;
NavigationService.Frame.NavigationFailed += (sender, e) =>
{
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
};
NavigationService.Frame.Navigated += OnFrameNavigated;
if (SystemNavigationManager.GetForCurrentView() != null)
{
SystemNavigationManager.GetForCurrentView().BackRequested += OnAppViewBackButtonRequested;
}
}
}
var activationHandler = GetActivationHandlers().FirstOrDefault(h => h.CanHandle(activationArgs);
if (activationHandler != null)
{
await activationHandler.HandleAsync(activationArgs);
}
if (IsInteractive(activationArgs))
{
var defaultHandler = new DefaultLaunchActivationHandler(_defaultNavItem);
if (defaultHandler.CanHandle(activationArgs))
{
await defaultHandler.HandleAsync(activationArgs);
}
// Ensure the current window is active
Window.Current.Activate();
// Tasks after activation
await StartupAsync();
}
}
拜托,如果有人以前使用过 Windows Template Studio。请告诉我如何在此代码中处理 Uri。我不知道把它放在哪里。目前,我的应用程序从 Uri
启动时启动到空白页
不确定您是否还在寻找这个,但我刚刚弄明白了。
在此处按照文档中的步骤为您的应用程序添加身份验证:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-windows-store-dotnet-get-started-users
但有两个区别:
首先,不要像文档指示的那样更改 MainPage.cs 上的 OnNavigatedTo 方法,保留它作为默认值。
然后在你的ActivationService.cs中修改如下:
if (IsInteractive(activationArgs))
{
var defaultHandler = new DefaultLaunchActivationHandler(_defaultNavItem);
if (defaultHandler.CanHandle(activationArgs))
{
await defaultHandler.HandleAsync(activationArgs);
}
// Ensure the current window is active
Window.Current.Activate();
// Tasks after activation
await StartupAsync();
}
通过添加:
if (((IActivatedEventArgs)activationArgs).Kind == ActivationKind.Protocol)
{
var protocolEventArgs = activationArgs as ProtocolActivatedEventArgs;
App.<<YOUR_CLOUD_SERVICE_NAME_HERE>>.ResumeWithURL(protocolEventArgs.Uri);
}
这是结果:
if (IsInteractive(activationArgs))
{
var defaultHandler = new DefaultLaunchActivationHandler(_defaultNavItem);
if (defaultHandler.CanHandle(activationArgs))
{
await defaultHandler.HandleAsync(activationArgs);
}
if (((IActivatedEventArgs)activationArgs).Kind == ActivationKind.Protocol)
{
var protocolEventArgs = activationArgs as ProtocolActivatedEventArgs;
App.KPMPClient.ResumeWithURL(protocolEventArgs.Uri);
}
// Ensure the current window is active
Window.Current.Activate();
// Tasks after activation
await StartupAsync();
}
希望对您有所帮助。对我来说是一种享受:)
根据 Microsoft 文档,您可以使用此代码处理应用程序 uri
protected override void OnActivated(IActivatedEventArgs args)
{
if (args.Kind == ActivationKind.Protocol)
{
ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
// TODO: Handle URI activation
// The received URI is eventArgs.Uri.AbsoluteUri
}
}
但那是从默认模板创建应用程序的时候。我的 UWP 项目是使用 Windows Template Studio 创建的,目前,我想放置该代码的位置现在是
protected override async void OnActivated(IActivatedEventArgs args)
{
await ActivationService.ActivateAsync(args);
}
导致这个..
public async Task ActivateAsync(object activationArgs)
{
if (IsInteractive(activationArgs))
{
// Initialize things like registering background task before the app is loaded
await InitializeAsync();
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (Window.Current.Content == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
Window.Current.Content = _shell;
NavigationService.Frame.NavigationFailed += (sender, e) =>
{
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
};
NavigationService.Frame.Navigated += OnFrameNavigated;
if (SystemNavigationManager.GetForCurrentView() != null)
{
SystemNavigationManager.GetForCurrentView().BackRequested += OnAppViewBackButtonRequested;
}
}
}
var activationHandler = GetActivationHandlers().FirstOrDefault(h => h.CanHandle(activationArgs);
if (activationHandler != null)
{
await activationHandler.HandleAsync(activationArgs);
}
if (IsInteractive(activationArgs))
{
var defaultHandler = new DefaultLaunchActivationHandler(_defaultNavItem);
if (defaultHandler.CanHandle(activationArgs))
{
await defaultHandler.HandleAsync(activationArgs);
}
// Ensure the current window is active
Window.Current.Activate();
// Tasks after activation
await StartupAsync();
}
}
拜托,如果有人以前使用过 Windows Template Studio。请告诉我如何在此代码中处理 Uri。我不知道把它放在哪里。目前,我的应用程序从 Uri
启动时启动到空白页不确定您是否还在寻找这个,但我刚刚弄明白了。
在此处按照文档中的步骤为您的应用程序添加身份验证:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-windows-store-dotnet-get-started-users
但有两个区别:
首先,不要像文档指示的那样更改 MainPage.cs 上的 OnNavigatedTo 方法,保留它作为默认值。
然后在你的ActivationService.cs中修改如下:
if (IsInteractive(activationArgs))
{
var defaultHandler = new DefaultLaunchActivationHandler(_defaultNavItem);
if (defaultHandler.CanHandle(activationArgs))
{
await defaultHandler.HandleAsync(activationArgs);
}
// Ensure the current window is active
Window.Current.Activate();
// Tasks after activation
await StartupAsync();
}
通过添加:
if (((IActivatedEventArgs)activationArgs).Kind == ActivationKind.Protocol)
{
var protocolEventArgs = activationArgs as ProtocolActivatedEventArgs;
App.<<YOUR_CLOUD_SERVICE_NAME_HERE>>.ResumeWithURL(protocolEventArgs.Uri);
}
这是结果:
if (IsInteractive(activationArgs))
{
var defaultHandler = new DefaultLaunchActivationHandler(_defaultNavItem);
if (defaultHandler.CanHandle(activationArgs))
{
await defaultHandler.HandleAsync(activationArgs);
}
if (((IActivatedEventArgs)activationArgs).Kind == ActivationKind.Protocol)
{
var protocolEventArgs = activationArgs as ProtocolActivatedEventArgs;
App.KPMPClient.ResumeWithURL(protocolEventArgs.Uri);
}
// Ensure the current window is active
Window.Current.Activate();
// Tasks after activation
await StartupAsync();
}
希望对您有所帮助。对我来说是一种享受:)