Windows10 Dev - Comunicazione app

Comunicazione da app ad app significa che la tua applicazione può parlare o comunicare con un'altra applicazione installata sullo stesso dispositivo. Questa non è una nuova funzionalità nell'applicazione UWP (Universal Windows Platform) ed era disponibile anche in Windows 8.1.

In Windows 10, vengono introdotti alcuni modi nuovi e migliorati per comunicare facilmente tra le applicazioni sullo stesso dispositivo. La comunicazione tra due app può avvenire nei seguenti modi:

  • Un'applicazione che avvia un'altra app con alcuni dati.
  • Le app scambiano semplicemente dati senza avviare nulla.

Il vantaggio principale della comunicazione tra app è che puoi suddividere le applicazioni in blocchi più piccoli, che possono essere mantenuti, aggiornati e utilizzati facilmente.

Preparare la tua app

Se si seguono i passaggi indicati di seguito, altre applicazioni possono avviare l'applicazione.

  • Aggiungere una dichiarazione di protocollo nel manifesto del pacchetto dell'applicazione.

  • Fare doppio clic sul file Package.appxmanifest file, disponibile in Esplora soluzioni come mostrato di seguito.

  • Vai al Declaration scheda e scrivere il nome del protocollo come mostrato di seguito.

  • Il passaggio successivo consiste nell'aggiungere il file activation codice, in modo che l'app possa rispondere in modo appropriato quando viene avviata dall'altra applicazione.

  • Per rispondere alle attivazioni del protocollo, dobbiamo sovrascrivere il file OnActivatedmetodo della classe di attivazione. Quindi, aggiungi il seguente codice inApp.xaml.cs file.

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(); 
		
   } 
}
  • Per avviare l'applicazione, puoi semplicemente utilizzare il file Launcher.LaunchUriAsync metodo, che avvierà l'applicazione con il protocollo specificato in questo metodo.

await Windows.System.Launcher.LaunchUriAsync(new Uri("win10demo:?SomeData=123"));

Cerchiamo di capirlo con un semplice esempio in cui abbiamo due applicazioni UWP con ProtocolHandlerDemo e FirstProtocolHandler.

In questo esempio, il ProtocolHandlerDemo l'applicazione contiene un pulsante e facendo clic sul pulsante si aprirà il file FirstProtocolHandler applicazione.

Di seguito è riportato il codice XAML nell'applicazione ProtocolHandlerDemo, che contiene un pulsante.

<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>

Di seguito è riportato il codice C #, in cui viene implementato l'evento clic del pulsante.

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")); 
      }
		
   }
}

Ora diamo uno sguardo al FirstProtocolHandlertabella delle applicazioni. Di seguito è riportato il codice XAML in cui viene creato un blocco di testo con alcune proprietà.

<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>

L'implementazione C # di App.xaml.cs file in cui OnActicatedè sovrascritto è mostrato di seguito. Aggiungi il codice seguente all'interno della classe App nel fileApp.xaml.cs file.

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(); 
   } 
}

Quando compili ed esegui il file ProtocolHandlerDemo applicazione su un emulatore, vedrai la seguente finestra.

Ora, quando fai clic sul pulsante, si aprirà il file FirstProtocolHandler applicazione come mostrato di seguito.