通过UWP中的自定义URI执行应用程序

时间:2017-08-28 20:19:53

标签: c# uwp

更新:添加":"在app3旁边调用它我不再得到错误,但是应用程序仍然没有启动,而是我收到一条错误消息告诉我需要一个新的应用程序来打开app3,我该如何解决这个问题?为什么我不能简单地打开应用程序?

我有一个申请app3除了打开一个空白页面之外什么都不做。 <code>app3</code>

来自其他应用app4我尝试拨打app3

public MainPage()
    {
        this.InitializeComponent();
        callUri();

    }

    private async void callUri()
    {
        var uriBing = new Uri(@"app3");

        // Launch the URI
        var success = await Windows.System.Launcher.LaunchUriAsync(uriBing);
    }

但是我收到了错误消息:

System.UriFormatException: 'Invalid URI: The format of the URI could not be determined.'

我究竟做错了什么?用于URI处理的Windows文档确实如何调用自定义URI,只有他们预制的URI,我还没有看到任何其他问题。 App3包已经创建。

2 个答案:

答案 0 :(得分:1)

如果您希望使用协议启动应用程序(它称为协议,即:yourappname://),则需要在appxmanifest声明中定义它。就像你在你的应用程序中所做的那样。然后,您可以使用您的应用名称和冒号(app://)

来调用它

现在,您的应用程序在通过协议启动后将不会转到您的默认页面,您只会看到一个空白页面。您需要在App.xaml.cs中的OnActivated方法中处理它,您需要覆盖该方法并处理协议激活。

  protected override void OnActivated(IActivatedEventArgs args)
  {
      if (args.Kind == ActivationKind.Protocol)
      {
         ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
         // Navigate to a view 
         Frame rootFrame = Window.Current.Content as Frame;
         if (rootFrame == null)
         {
            rootFrame = new Frame();
            Window.Current.Content = rootFrame;
         }
         // assuming you wanna go to MainPage when activated via protocol
         rootFrame.Navigate(typeof(MainPage), eventArgs); 

      }
   } 

有关详情,请阅读更多here

答案 1 :(得分:0)

在这种情况下,如果appmanifest \ declarations中的协议名称是 app3 ,则您的自定义Url应该是app3://。部署app3后,您可以通过LaunchUriAync启动它。

e.g

await LaunchUriAsync(@"app3://")

https://docs.microsoft.com/en-us/windows/uwp/launch-resume/handle-uri-activation