September 2017

Band 32, Nummer 9

Dieser Artikel wurde maschinell übersetzt.

Moderne Apps: Protokollregistrierung und -aktivierung in UWP-Apps

Durch Frank La La

Frank La VigneIn meinem letzten Spalte untersucht ich wie das Startprogramm Klasse zum Erweitern der Funktionalität einer App für die universelle Windows-Plattform (UWP), durch die Nutzung der Funktionen von anderen apps in Windows integriert. Beispielsweise konnte ich hinzufügen ausgestattete Zuordnungsfunktionen, z. B. Suchen nach eine gute Pizza gefunden und ermitteln, erfahren Sie, wie Datenverkehr Berichte können abschließen, ohne wesentlich komplexer Codebasis Meine app hinzufügen. In diesem Monat-Spalte werde ich die andere Seite der Gleichung untersuchen: Wie Sie eine uwp-app-Funktionalität an andere apps verfügbar zu machen.

Natürlich, programmgesteuert Starten von Anwendungen, und übergeben von Parametern entlang aus anderen Anwendungen ist ein Vorläufer des UWP. Viele Windows-apps sind in der Tat dies über Befehlszeilenoptionen unterstützen. Übergeben Sie z. B. Microsoft Word im abgesicherten Modus starten, auf dem Add-Ons und -Plug-ins deaktiviert sind, den Parameter "/ safe" zur Datei WinWord.exe. Um dies zu testen, drücken Sie die Windows-Taste + R, um das Dialogfeld "ausführen" zu öffnen. Geben Sie in das Textfeld ein "Winword.exe/safe", und klicken Sie auf OK. Wenn Sie Microsoft Word auf Ihrem System installiert haben, wird das Programm im abgesicherten Modus gestartet. Darüber hinaus sind ähnliche Befehle für Excel, PowerPoint und andere vorhanden. Starten eines Programms mit Parametern nicht klar, einen neuen Mechanismus. Was neu ist, ist jedoch der zusätzlichen Mechanismen, die universelle Windows-Plattform bietet: Aktivierung des Uniform Resource Identifier (URI).

URI-Aktivierung

In meiner letzte Spalte (msdn.com/magazine/mt784669), starten und das Übergeben von Parametern an mehrere apps URI-Aktivierung verwendet. Die apps dann übernahm diese Eingabeparameter und Reaktionen bewirkten diese wurden. Z. B. Durchläufe Richtungen zwischen Washington, D.C., und New York City mit der Maps-standardanwendung in Windows 10 driving abrufen, die app einfach den folgenden URI auf die Startprogramm-Klasse:

bingmaps:?rtp=adr.Washington,%20DC~adr.New%20York,%20NY&mode=d&trfc=1

Alternativ können Sie diesen Befehl eingeben, in das Dialogfeld Ausführen auch das gleiche Ergebnis erzielt. Die Maps-app wurde registriert, um das Protokoll "Bingmaps" nicht verarbeiten. Der Text nach Parameter darstellt, die das Fragezeichen, entlang der Maps-App übergeben. In diesem Fall wird die Start- und Endpunkte, zusammen mit einem Modus an, dass treibenden ("d") und 1, um die Ergebnisse datenverkehrsdaten hinzuzufügen.

Was geschieht, wenn Sie Ihre app auf ähnliche Weise ausführen möchten? Was sind die Schritte, die Sie ergreifen, um ein Protokoll zu registrieren und behandeln die nachfolgenden an sie übergebenen Parameter müssen?

Der erste Schritt ist zum Erstellen eines neuen Projekts. Erstellen Sie ein neues, leeres UWP-Projekt in Visual Studio, indem Sie „Neues Projekt“ aus dem Menü „Datei“ auswählen. Erweitern Sie die installierten Vorlagen | Windows | Leere App (universelle Windows). Nennen Sie das Projekt ProtocolActivation, und klicken Sie dann auf OK. Unmittelbar danach wird ein Dialogfeld angezeigt, gefragt werden, welche Version von Windows die app als Ziel. Für dieses Projekt werden die Standardoptionen Ordnung, sein, damit Sie einfach auf OK klicken können.

Ein URI-Protokoll registrieren

Nun, dass das Projekt erstellt wurde, öffnen Sie die Appmanifest, um ein Protokoll zu registrieren. Klicken Sie im Projektmappen-Explorer suchen Sie nach der Datei "Package.appmanifest", und doppelklicken Sie darauf, um ihn zu öffnen. Klicken Sie auf der Registerkarte "Deklarationen". Wählen Sie in der Dropdownliste unter Verfügbare Deklarationen Protokoll. Klicken Sie nun auf Hinzufügen, um die Deklaration für das Manifest hinzuzufügen. Der Bildschirm sollte ähnlich aussehen Abbildung 1.

eine Protokoll-Deklaration (Beachten Sie die Validierungsfehler) hinzufügen
Abbildung 1 eine Protokoll-Deklaration (Beachten Sie die Validierungsfehler) hinzufügen

Während es dringend empfohlen wurde, Einträge für das Logo und die Anzeige-Name-Feldern bereitzustellen, ist das einzige Pflichtfeld Name. Geben Sie "Bingmaps" in das Textfeld ein. Drücken Sie die Tab-Taste. Beachten Sie, dass die Validierungsfehler nicht mehr angezeigt, nachdem das Textfeld den Fokus verliert. Führen Sie durch Drücken von F5, im Menü Debuggen auswählen Debuggen oder einfach durch Klicken auf das Symbol "Play" auf der Symbolleiste auf das Projekt ein. Sobald die app ausgeführt wird, drücken Sie die Windows-Taste + R, um das Dialogfeld "ausführen" starten. Geben Sie "Bingmaps:" in das Textfeld ein, und klicken Sie auf OK. Beachten Sie, dass die standardmäßige Zuordnungen app wie zuvor gestartet.

Daraufhin wird eine wichtige Einschränkung: Einige Protokolle können nicht überschrieben werden. Eine vollständige Liste finden Sie auf Meine vorherige Spalte oder finden Sie in der MSDN-Dokumentation auf reservierten und URI-Schema-Namen am bit.ly/2st28Er. Wählen eine der folgenden reservierten Namen führt nicht in einer Fehlermeldung; die app wird nicht einfach aktiviert werden.

Registrieren ein benutzerdefiniertes Protokoll

Schließen Sie die Anwendung aus, wenn er immer noch ausgeführt wird. Wechseln Sie zurück in die Manifestdatei, und ändern Sie den Inhalt des Felds Name in "Msdncolors", und speichern Sie das Projekt. Jetzt, drücken Sie die Windows-Taste + R, um das Dialogfeld "ausführen" anzuzeigen Geben Sie "Msdncolors" in das Textfeld ein, und klicken Sie auf OK. Eine systemweite-Dialogfeld wird angezeigt, für eine app im Speicher, die dieses Protokoll bewältigt gesucht werden soll, entsprechend vorschlagen Abbildung 2.

(Dialogfeld), die angezeigt wird, wenn das System einen unbekannten Protokoll sieht
Abbildung 2 (Dialogfeld), die angezeigt wird, wenn das System einen unbekannten Protokoll sieht

Während das Protokoll in der app-Manifestdatei deklariert worden sein könnten, noch nicht er noch auf dem System registriert wurde. Dies geschieht bei der Installation. Führen Sie die Projektmappe jetzt aus, und geben Sie dann "Msdncolors" in das Dialogfeld "ausführen" erneut. Im selben Dialogfeld angezeigt wird, jedoch mit einer neuen Option hinzugefügt: ProtocolActivation-app, die wie gezeigt in abbildung3. Klicken Sie auf "OK". Die ProtocolActivation-app wird gestartet. Die app zu schließen. Geben Sie "Msdncolors" einmal in das Dialogfeld Ausführen. Dieses Mal werden keine (Dialogfeld), ob die Option "Immer diese app verwenden" aktiviert wurde, wird die app einfach ausgeführt.

wird die neue App jetzt als eine Option angezeigt.
Abbildung 3 wird die neue App jetzt als eine Option angezeigt.

Behandlung von Aktivierung

Uwp-apps kann eine beliebige Anzahl von Möglichkeiten, vom Benutzer gestartet werden, wenn die Kachel tippen ist oder vom Netzwerkprotokoll aktiviert aktiviert. Um zu erkennen, wie die app gestartet wurde, muss der Ereignishandler OnActivated überschrieben werden.

Klicken Sie im Projektmappen-Explorer öffnen Sie die Datei "App.Xaml.cs", und fügen Sie den folgenden Code der App-Klasse:

protected async override void OnActivated(IActivatedEventArgs e)
{
  if (e.Kind == ActivationKind.Protocol)
  {
    var dialog = new MessageDialog("App Activated by Protocol.");
    await dialog.ShowAsync();
  }
  Window.Current.Activate();
}

Führen Sie die Projektmappe erneut, öffnen Sie das Dialogfeld "ausführen", geben Sie "Msdncolors:", und klicken Sie auf OK. Dieses Mal wird ein Meldungsdialogfeld angezeigt. Beenden Sie die app ausgeführt wird. Jetzt, öffnen Sie das Dialogfeld "ausführen" erneut durch Drücken der Windows-Taste + R, geben Sie "Msdncolors:" in das Textfeld ein, und klicken Sie auf OK. Beachten Sie, dass im gleichen Dialogfeld wird angezeigt, aber die app nicht, über den Begrüßungsbildschirm ausgeführt. Der Grund Warum wird der Fehler behandelt werden weiter unten.

Übergeben von Parametern über-URI

Beim Starten einer app durch die Aktivierung der URI der genutzt werden kann, wird der größte Vorteil bei der Übergabe von Parametern aus einer app in eine andere. Dies kann erfolgen, indem Sie Parameter an die Protocol-Anforderung anfügen. Dieser Mechanismus funktioniert fast genauso wie HTTP-GET-Anforderungen.

Führen Sie z. B.-URIs ein Muster aus:

[protocol]:[host address]?[parameter1]=[value1]& [parameter2]=[value2]

Erhält z. B. den URI https://bing.com/search?q=data%20driven%20podcast, das Protokoll ist HTTP, ist die Adresse des Hosts bing.com, und der Wert von "Daten % 20driven % 20podcast" wird zum Übergeben der Parameter "Q". Beachten Sie, dass Leerzeichen in "Datengesteuerte Podcast" in "% 20" konvertiert werden Parameternamen und Werte, die in einem URI übergeben müssen codiert werden.

Ändern Sie den Code innerhalb der OnActivated-Methode in aufgeführten Änderungen enthalten Abbildung 4.

Abbildung 4 ändern den Code innerhalb der OnActivated-Methode

if (e.Kind == ActivationKind.Protocol)
{
  var args = e as ProtocolActivatedEventArgs;
  var message = "no parameters passed";
  if (args.Uri.PathAndQuery != string.Empty)
  {
    var queryString = args.Uri.Query;
    var absolutePath = args.Uri.AbsolutePath;
    message = $"Query String: {queryString}\n AbsolutePath: {absolutePath}";
  }
  var dialog = new MessageDialog(message);
  await dialog.ShowAsync();
}
Window.Current.Activate();

Der Code in Abbildung 4 wandelt den IActivatedEventArgs-Parameter auf und bietet Zugriff auf eine Reihe von Eigenschaften, die spezifisch für Protokoll-aktivierungsszenarien eine ProtocolActivatedEventArgs-Klasse. In diesem Fall ist es u. u. hauptsächlich betroffenen mit der URI-Eigenschaft. Der URI enthält Informationen zur app, die mittels Protokoll Aktivierung übergeben werden. Führen Sie die app erneut aus, öffnen Sie das Dialogfeld "ausführen", geben Sie "Msdncolors:background? red" in das Textfeld ein, und klicken Sie auf OK. Hier wird die app zu starten. Dieses Mal müssen jedoch das Dialogfeld "Meldung" der Abfragezeichenfolge und AbsolutePath Werte angezeigt.

Beenden Sie die app, und führen Sie den gleichen Befehl erneut aus, über das Dialogfeld "ausführen". Die app fortgesetzt nicht noch einmal: über den Begrüßungsbildschirm. Es ist Zeit, die adressiert.

Ändern Sie die Methode OnActivated in App.xaml.cs entsprechend den Code in Abbildung 5. Während dieser Code komplexe aussieht, ist es jedoch nicht. Ein Großteil der zusätzlichen Code Probleme beziehen sich auf das Suchen nach den aktuellen Inhalt des aktiven Fensters. In Fällen, in denen die Anwendung bereits ausgeführt wird, werden für diese app der aktuelle Inhalt der MainPage-Klasse. Wenn die Anwendung wird nicht ausgeführt und wird durch Protokoll Aktivierung gestartet, es gibt keinen aktuellen Inhalt und Window.Current.Content hat einen null-Wert. Der Code in diesen Fällen erstellt einen neuen Frame, legt die entsprechenden Ereignishandler und den Inhalt und navigiert zu der MainPage. Weitere Informationen zu den Fenster und Frame-Klassen finden Sie unter bit.ly/2tGwt1H und bit.ly/2sQ8LTY zugeordnet.

Abbildung 5 aktualisiert OnActivated-Code

protected override void OnActivated(IActivatedEventArgs e)
{
  if (e.Kind == ActivationKind.Protocol)
  {
    var args = e as ProtocolActivatedEventArgs;
    if (args.Uri.PathAndQuery != string.Empty)
    {
      Frame rootFrame = Window.Current.Content as Frame;
      if (rootFrame == null)
      {
        rootFrame = new Frame();
        rootFrame.NavigationFailed += OnNavigationFailed;
        Window.Current.Content = rootFrame;
      }
      if (rootFrame.Content == null)
      {
        if (!rootFrame.Navigate(typeof(MainPage)))
        {
          throw new Exception("Failed to create initial page");
        }
      }
      var fragment = args.Uri.Fragment;
      var absolutePath = args.Uri.AbsolutePath;
      var mainPage = rootFrame.Content as MainPage;
      mainPage.NavigateWithParameters(absolutePath, fragment);
    }
  }
  Window.Current.Activate();
}

Der Rest des Codes ist eine geringfügige Änderungen gegenüber vor, durch das Hinzufügen von einem Aufruf an eine NavigateWithParameters-Methode. Dies ist wie die Informationen aus dem URI der MainPage-Klasse gesendet abgerufen wird. Jetzt ist die Zeit für die Datei "MainPage.Xaml.cs" Ermittlungsmethode hinzu, und fügen einige Elemente der Benutzeroberfläche in der Datei "MainPage.xaml".

Ändern Sie zunächst die Datei "MainPage.xaml" um den folgenden XAML-Code in das Seitenelement haben:

<Grid Name="grdBackground" Background=
  "{ThemeResource ApplicationPageBackgroundThemeBrush}">
  <Grid Name="grdForeground" Width="100" Height="100"></Grid>
</Grid>

Hiermit das Datenraster-Steuerelement, das bereits GrdBackground"Name" hinzugefügt, und fügt eine innere Raster mit dem Namen "GrdForegound."

Als Nächstes fügen Sie den Code in Abbildung 6 in die Datei "MainPage.Xaml.cs". Der Großteil des Codes konvertiert ein Hexadezimalcode ARGB-Farbe Wert wie #FFAA3CC7 in etwas, das ein SolidColorBrush verwenden kann. Der Konvertierungscode zog stammen aus dem Blogbeitrag unter bit.ly/2tGuFFH, enthält auch eine hervorragende Erklärung der Funktionsweise der Konvertierung. Der Rest des Codes ist recht einfach. Es ändert sich die Farbe einer Rasterseite oder anderen basierend auf dem Zielparameter.

Abbildung 6 die NavigateWithParameters-Methode

public void NavigateWithParameters(string target, string color)
{
  string hexCode = color.Replace("#", string.Empty);
  byte a = (byte)(Convert.ToUInt32(hexCode.Substring(0, 2), 16));
  byte r = (byte)(Convert.ToUInt32(hexCode.Substring(2, 2), 16));
  byte g = (byte)(Convert.ToUInt32(hexCode.Substring(4, 2), 16));
  byte b = (byte)(Convert.ToUInt32(hexCode.Substring(6, 2), 16));

  var brush = new SolidColorBrush(Color.FromArgb(a, r, g, b));

  if (target.ToLower() == "background")
  {
    grdBackground.Background = brush;
  }
  else
  {
    grdForeground.Background = brush;
  }
}

Nachdem der gesamte Code vorhanden ist, führen Sie die app an. In den Dialogfeldtyp ausführen "Msdncolors:foreground? #FFAA3CC7", und klicken Sie auf OK. Dies sollte die Schattierung Violett Vordergrund Raster aktivieren. Geben Sie nun "Msdncolors:background? #FFCFCFCF" in das Textfeld ein, der das Dialogfeld "ausführen", und klicken Sie auf OK. Hintergrund Raster aktivieren eine Hellgrau. Die app zu schließen. Erneut Geben Sie ein, der zuvor eingegebenen Befehle, um anzuzeigen, dass die app identisch ist, wenn er nicht bereits ausgeführt wird.

Zusammenfassung

In dieser Spalte veranschaulicht ich, wie Sie eine uwp-app zum Behandeln eines bestimmten Protokolls registrieren. Hinzufügen von dieser Funktion wird Ihr uwp-apps an andere apps auf dem Gerät eines Benutzers zugänglich. Auf diese Weise können andere Entwickler interessante Verwendungsmöglichkeiten für die apps entwickeln und macht Ihre app sinnvoller zu erstellen. Während der Großteil der Aktivierung in dieser Spalte erfolgte, wird das verwenden im Dialogfelds "ausführen", in der gleichen URI der Startprogramm-Klasse übergeben die gleichen Ergebnisse liefert.


Frank La Vigneist chief Evangelist am DataLeader.IO, in dem er Kunden, die Technologie nutzen hilft, um eine bessere Welt zu erstellen. Er wird von den Data Science-Podcast datengesteuerten (DataDriven.tv) hosten und Blogs regelmäßig in FranksWorld.com.

Unser Dank gilt dem folgenden technischen Experten für die Durchsicht dieses Artikels: Jose Luis Arten


Diesen Artikel im MSDN Magazine-Forum diskutieren