有没有办法要求在UWP中并排打开另一个应用程序?

时间:2016-01-12 10:15:50

标签: c# uwp

说我是否要在顶部窗口中打开翻译器。传递一些字符串供它翻译。

这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

您可以launch the default app for a given URI只使用Launcher类,例如:

// The URI to launch
var uri = new Uri(@"http://stackoverflow.com/q/34740877/50447");

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

if (success)
{
    // URI launched
}
else
{
    // URI launch failed
}

这也支持自定义URI方案,因此您可以使用ms-drive-to:?cp=40.726966~-74.006076之类的URI来启动驾驶应用,并获取前往纽约那一点的路线。

同样,您can register your own URI scheme以便您可以启动。因此,如果您找不到通过URI激活来处理翻译的应用程序,那么可以编写自己的可以获取translate:{string}&from=en&to=es形式的URI然后拥有可以从其他应用程序启动

答案 1 :(得分:1)

我认为此示例对您有所帮助 点击此处:How to launch an UWP app from another app

以下代码是核心:
在你的启动器应用程序中。

Uri uri = new Uri("test-launchpage1://somepath"); 
//if you don't use this option, the system will show a confim box when you open new app
var promptOptions = new Windows.System.LauncherOptions(); 
promptOptions.TreatAsUntrusted = false; 

bool isSuccess = await Windows.System.Launcher.LaunchUriAsync(uri, promptOptions); 

在你推出的app中:
在package.appxmainfest中,您需要config launch sechme,如下所示:

<Package> 
  <Applications> 
    <Application> 
      <Extensions> 
        <uap:Extension Category="windows.protocol"> 
          <uap:Protocol Name="test-launchpage1"> 
            <uap:DisplayName>LaunchPage1</uap:DisplayName> 
          </uap:Protocol> 
        </uap:Extension> 
      </Extensions> 
    </Application> 
  </Applications> 
</Package>

在启动应用的app.cs中,您需要覆盖事件处理程序OnActivated,如下所示:

protected override void OnActivated(IActivatedEventArgs args) 
{ 
    if (args.Kind == ActivationKind.Protocol) 
    { 
        Frame rootFrame = Window.Current.Content as Frame; 

        if (rootFrame == null) 
        { 
            rootFrame = new Frame(); 
            Window.Current.Content = rootFrame; 
            rootFrame.NavigationFailed += OnNavigationFailed; 
        } 

        var protocolEventArgs = args as ProtocolActivatedEventArgs; 
        rootFrame.Navigate(typeof(MainPage), protocolEventArgs.Uri); 
        Window.Current.Activate(); 
    } 
}