Windows10 Dev - App Kommunikation
App-zu-App-Kommunikation bedeutet, dass Ihre Anwendung mit einer anderen Anwendung sprechen oder mit dieser kommunizieren kann, die auf demselben Gerät installiert ist. Dies ist keine neue Funktion in der UWP-Anwendung (Universal Windows Platform) und war auch in Windows 8.1 verfügbar.
In Windows 10 werden einige neue und verbesserte Methoden eingeführt, um die Kommunikation zwischen Anwendungen auf demselben Gerät zu vereinfachen. Die Kommunikation zwischen zwei Apps kann auf folgende Arten erfolgen:
- Eine Anwendung startet eine andere App mit einigen Daten.
- Apps tauschen einfach Daten aus, ohne etwas zu starten.
Der Hauptvorteil der App-zu-App-Kommunikation besteht darin, dass Sie Anwendungen in kleinere Teile aufteilen können, die einfach gewartet, aktualisiert und verwendet werden können.
Bereiten Sie Ihre App vor
Wenn Sie die folgenden Schritte ausführen, können andere Anwendungen Ihre Anwendung starten.
Fügen Sie eine Protokolldeklaration im Anwendungspaketmanifest hinzu.
Doppelklicken Sie auf die Package.appxmanifest Datei, die im Projektmappen-Explorer wie unten gezeigt verfügbar ist.
Gehe zum Declaration Klicken Sie auf die Registerkarte und schreiben Sie den Namen des Protokolls wie unten gezeigt.
Der nächste Schritt ist das Hinzufügen der activation Code, damit die App beim Starten durch die andere Anwendung angemessen reagieren kann.
Um auf Protokollaktivierungen zu reagieren, müssen wir das überschreiben OnActivatedMethode der Aktivierungsklasse. Fügen Sie also den folgenden Code hinzuApp.xaml.cs Datei.
protected override void OnActivated(IActivatedEventArgs args) {
ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs;
if (args != null){
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null){
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
// Set the default language
rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];
rootFrame.NavigationFailed += OnNavigationFailed;
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null){
// When the navigation stack isn't restored, navigate to the
// first page, configuring the new page by passing required
// information as a navigation parameter
rootFrame.Navigate(typeof(MainPage), null);
}
// Ensure the current window is active
Window.Current.Activate();
}
}
Um die Anwendung zu starten, können Sie einfach die verwenden Launcher.LaunchUriAsync Methode, mit der die Anwendung mit dem in dieser Methode angegebenen Protokoll gestartet wird.
await Windows.System.Launcher.LaunchUriAsync(new Uri("win10demo:?SomeData=123"));
Lassen Sie uns dies anhand eines einfachen Beispiels verstehen, in dem wir zwei UWP-Anwendungen mit haben ProtocolHandlerDemo und FirstProtocolHandler.
In diesem Beispiel ist die ProtocolHandlerDemo Anwendung enthält eine Schaltfläche und durch Klicken auf die Schaltfläche wird die geöffnet FirstProtocolHandler Anwendung.
Der XAML-Code in der ProtocolHandlerDemo-Anwendung, die eine Schaltfläche enthält, ist unten angegeben.
<Page
x:Class = "ProtocolHandlerDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:ProtocolHandlerDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button x:Name = "LaunchButton" Content = " Launch First Protocol App"
FontSize = "24" HorizontalAlignment = "Center"
Click = "LaunchButton_Click"/>
</Grid>
</Page>
Unten ist der C # -Code angegeben, in dem das Schaltflächenklickereignis implementiert ist.
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace ProtocolHandlerDemo {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page {
public MainPage(){
this.InitializeComponent();
}
private async void LaunchButton_Click(object sender, RoutedEventArgs e) {
await Windows.System.Launcher.LaunchUriAsync(new
Uri("win10demo:?SomeData=123"));
}
}
}
Lassen Sie uns nun einen Blick in die FirstProtocolHandlerAnwendungstabelle. Im Folgenden ist der XAML-Code angegeben, in dem ein Textblock mit einigen Eigenschaften erstellt wird.
<Page
x:Class = "FirstProtocolHandler.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:FirstProtocolHandler"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Text = "You have successfully launch First Protocol Application"
TextWrapping = "Wrap" Style = "{StaticResource SubtitleTextBlockStyle}"
Margin = "30,39,0,0" VerticalAlignment = "Top" HorizontalAlignment = "Left"
Height = "100" Width = "325"/>
</Grid>
</Page>
Die C # -Implementierung des App.xaml.cs Datei in der OnActicatedDiese Überschreibung wird unten gezeigt. Fügen Sie den folgenden Code in die App-Klasse einApp.xaml.cs Datei.
protected override void OnActivated(IActivatedEventArgs args) {
ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs;
if (args != null) {
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null) {
// Create a Frame to act as the navigation context and navigate to
the first page
rootFrame = new Frame();
// Set the default language
rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];
rootFrame.NavigationFailed += OnNavigationFailed;
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null) {
// When the navigation stack isn't restored navigate to the
// first page, configuring the new page by passing required
// information as a navigation parameter
rootFrame.Navigate(typeof(MainPage), null);
}
// Ensure the current window is active
Window.Current.Activate();
}
}
Wenn Sie das kompilieren und ausführen ProtocolHandlerDemo Anwendung auf einem Emulator, sehen Sie das folgende Fenster.
Wenn Sie nun auf die Schaltfläche klicken, wird die geöffnet FirstProtocolHandler Anwendung wie unten gezeigt.