Kolumne: XAML-Expertise

XAML-Tipp: UWP – App-zu-App-Kommunikation mit dem Launcher
Keine Kommentare

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „UWP: App-zu-App-Kommunikation mit dem Launcher“

Eine weitere Möglichkeit der App-zu-App-Kommunikation ist es, über den Launcher zu gehen. Dieser kann eine andere App starten und dabei Daten übertragen. Unterschiedliche Protokolle ermöglichen es sogar, dass die geöffnete App sofort mit eigenen Daten antworten kann. Sollte die App bereits geöffnet sein, empfängt siese einfach nur die Daten. Der Zustand der Oberfläche muss dagegen leider vorher gespeichert und wiederhergestellt werden.

UWP: App-zu-App-Kommunikation mit dem Launcher

Damit eine App von einer anderen App aufrufbar ist, wird ein Eintrag in der Package.appxmanifest-Datei unter „Declarations“ benötigt. Hierfür wird das „Protocol“ hinzugefügt, dazu ein Name und Display Name hinterlegt (Abb. 1).

Abb. 1: Eine App aufrufbar machen über das Aktivieren von Protocol

Erfolgt ein Start oder ein Antriggern der App über den Launcher, wird in der App.xaml.cs-Datei die OnActivated-Methode ausgeführt. Die Daten werden über ProtocolActivatedEventArgs bereitgestellt. In Listing 1 ist dazu ein Beispielcode, der die Daten empfängt und an die Main Page weiterleitet.

sealed partial class App : Application
{
  protected override void OnActivated(IActivatedEventArgs args)
  {
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame == null)
    {
      rootFrame = new Frame();
      Window.Current.Content = rootFrame;
    }

    var protocolActivatedEventArgs = (ProtocolActivatedEventArgs) args;
    rootFrame.Navigate(typeof(MainPage), protocolActivatedEventArgs);

    Window.Current.Activate();
  }
...

Die weitergeleiteten Daten stehen über die OnNavigatedTo-Methode zur Verfügung und sind in den ProtocolActivatedEventArgs enthalten. Der Code dazu wird in Listing 6 gezeigt. Das Starten von Apps erfolgt über die Launcher-Klasse (Listing 3). Diese benötigt den Protocol- und Package-Family-Name. Der Protocol-Name wurde bei der Package.appxmanifest-Datei hinterlegt (Abb. 1). Der korrekte Package-Family-Name befindet sich ebenfalls in der gleichen Manifestdatei, unter dem Bereich „Packaging“ ganz unten. Das Ergebnis, wenn beide Apps miteinander über App Services kommunizieren, ist vergleichbar wie in Abbildung 2 des ersten Teils.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  var protocolActivatedEventArgs = e.Parameter as ProtocolActivatedEventArgs;
  if (protocolActivatedEventArgs != null)
  {
    tbMessage.Text = protocolActivatedEventArgs.Data["TestData"] as string;
  }
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
  var testAppUri = new Uri("test-app2app:");
  var options = new LauncherOptions();
  options.TargetApplicationPackageFamilyName = "0c5b6258-3cb4-4ace-ae15-917f7d9b0466_0fbekf7tvynfp";

  var inputData = new ValueSet();
  inputData["TestData"] = tbResult.Text;
  await Windows.System.Launcher.LaunchUriAsync(testAppUri, options, inputData);
}
Unsere Redaktion empfiehlt:

Relevante Beiträge

X
- Gib Deinen Standort ein -
- or -