Windows10 Dev - komunikacja aplikacji
Komunikacja między aplikacjami oznacza, że aplikacja może komunikować się lub komunikować się z inną aplikacją zainstalowaną na tym samym urządzeniu. Nie jest to nowa funkcja w aplikacji Universal Windows Platform (UWP) i była również dostępna w systemie Windows 8.1.
W systemie Windows 10 wprowadzono nowe i ulepszone sposoby łatwej komunikacji między aplikacjami na tym samym urządzeniu. Komunikacja między dwiema aplikacjami może odbywać się na następujące sposoby -
- Jedna aplikacja uruchamia inną aplikację z pewnymi danymi.
- Aplikacje po prostu wymieniają dane bez uruchamiania czegokolwiek.
Główną zaletą komunikacji między aplikacjami jest to, że można podzielić aplikacje na mniejsze fragmenty, które można łatwo konserwować, aktualizować i wykorzystywać.
Przygotowanie aplikacji
Jeśli wykonasz poniższe czynności, inne aplikacje mogą uruchomić Twoją aplikację.
Dodaj deklarację protokołu w manifeście pakietu aplikacji.
Kliknij dwukrotnie plik Package.appxmanifest plik, który jest dostępny w Eksploratorze rozwiązań, jak pokazano poniżej.
Przejdź do Declaration i wpisz nazwę protokołu, jak pokazano poniżej.
Następnym krokiem jest dodanie activation kod, dzięki czemu aplikacja może odpowiednio reagować, gdy jest uruchamiana przez inną aplikację.
Aby odpowiedzieć na aktywacje protokołu, musimy zastąpić OnActivatedmetoda klasy aktywacyjnej. Więc dodaj następujący kod wApp.xaml.cs plik.
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();
}
}
Aby uruchomić aplikację, możesz po prostu użyć pliku Launcher.LaunchUriAsync metoda, która uruchomi aplikację z protokołem określonym w tej metodzie.
await Windows.System.Launcher.LaunchUriAsync(new Uri("win10demo:?SomeData=123"));
Zrozummy to na prostym przykładzie, w którym mamy dwie aplikacje UWP z ProtocolHandlerDemo i FirstProtocolHandler.
W tym przykładzie ProtocolHandlerDemo aplikacja zawiera jeden przycisk i po jego kliknięciu otworzy plik FirstProtocolHandler podanie.
Poniżej podano kod XAML w aplikacji ProtocolHandlerDemo, która zawiera jeden przycisk.
<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>
Poniżej podano kod C #, w którym zaimplementowano zdarzenie kliknięcia przycisku.
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"));
}
}
}
Teraz przyjrzyjmy się plikowi FirstProtocolHandlertabela aplikacji. Poniżej podano kod XAML, w którym tworzony jest blok tekstowy z niektórymi właściwościami.
<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>
Implementacja języka C # App.xaml.cs plik, w którym OnActicatedjest zastąpiony, pokazano poniżej. Dodaj następujący kod w klasie App wApp.xaml.cs plik.
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();
}
}
Podczas kompilowania i wykonywania ProtocolHandlerDemo aplikacji na emulatorze, zobaczysz następujące okno.
Teraz po kliknięciu przycisku otworzy się plik FirstProtocolHandler aplikacji, jak pokazano poniżej.